在Java中繪制圓形和橢圓,1. 使用graphics或graphics2d類的drawoval()和filloval()方法;2. 通過設置相同width和height繪制圓形;3. 控制圓形粗細使用basicstroke類并調用setstroke()方法;4. 修改顏色使用setcolor()方法;5. 繪制虛線圓形需定義dashpattern數組并傳入basicstroke構造函數;6. 動態調整大小需監聽componentresized事件并重繪;7. 橢圓居中需根據窗口尺寸計算x和y坐標。
Java中繪制圓形和橢圓,主要依賴于Graphics或Graphics2D類提供的方法。核心是理解drawOval()和fillOval()這兩個方法,它們實際上繪制的是一個矩形的內切橢圓,當矩形是正方形時,就變成了圓形。
繪制圓形和橢圓的核心在于理解Graphics類中的drawOval(int x, int y, int width, int height)和fillOval(int x, int y, int width, int height)方法。x和y定義了橢圓外切矩形的左上角坐標,width和height則定義了矩形的寬度和高度。
繪制圓形,只需要保證width和height相等即可。
立即學習“Java免費學習筆記(深入)”;
import javax.swing.*; import java.awt.*; public class DrawCircle extends JPanel { @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; // 繪制圓形 int diameter = 100; // 直徑 int x = 50; int y = 50; g2d.setColor(Color.red); g2d.drawOval(x, y, diameter, diameter); // 繪制填充圓形 x = 200; g2d.setColor(Color.BLUE); g2d.fillOval(x, y, diameter, diameter); // 繪制橢圓 int width = 150; int height = 75; x = 50; y = 200; g2d.setColor(Color.GREEN); g2d.drawOval(x, y, width, height); // 繪制填充橢圓 x = 200; g2d.setColor(Color.YELLOW); g2d.fillOval(x, y, width, height); } public static void main(String[] args) { JFrame frame = new JFrame("Draw Circle and Oval"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new DrawCircle()); frame.setSize(400, 400); frame.setVisible(true); } }
如何控制圓形的粗細和顏色?
控制圓形的粗細和顏色主要通過Graphics2D類實現。Graphics2D是Graphics的子類,提供了更強大的繪圖功能,包括設置線條粗細(Stroke)和顏色(Color)。
import javax.swing.*; import java.awt.*; import java.awt.geom.Ellipse2D; public class DrawCircleThickness extends JPanel { @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; // 設置線條粗細 Stroke stroke = new BasicStroke(5); // 5像素粗細 g2d.setStroke(stroke); // 設置顏色 g2d.setColor(Color.MAGENTA); // 繪制圓形 int diameter = 100; int x = 50; int y = 50; g2d.drawOval(x, y, diameter, diameter); // 繪制填充的,帶粗細邊框的圓形 g2d.setColor(Color.CYAN); g2d.fill(new Ellipse2D.double(200, 50, diameter, diameter)); // 繪制橢圓 g2d.setColor(Color.ORANGE); int width = 150; int height = 75; x = 50; y = 200; g2d.drawOval(x, y, width, height); } public static void main(String[] args) { JFrame frame = new JFrame("Draw Circle with Thickness"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new DrawCircleThickness()); frame.setSize(400, 400); frame.setVisible(true); } }
這段代碼展示了如何使用BasicStroke來設置線條的粗細,以及如何使用setColor來改變顏色。 注意這里使用了Ellipse2D.Double來創建橢圓,然后使用g2d.fill()來填充,可以更靈活地控制填充效果。
如何繪制虛線圓形?
繪制虛線圓形同樣需要使用Graphics2D類,關鍵在于使用BasicStroke的構造函數來定義虛線的樣式。BasicStroke允許你指定虛線的線段長度、間隔長度等參數。
import javax.swing.*; import java.awt.*; import java.awt.geom.Ellipse2D; public class DrawDashedCircle extends JPanel { @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; // 定義虛線樣式 float[] dashPattern = {10, 5, 2, 5}; // 實線長度10,間隔5,實線2,間隔5 BasicStroke dashedStroke = new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dashPattern, 0.0f); g2d.setStroke(dashedStroke); // 設置顏色 g2d.setColor(Color.DARK_GRAY); // 繪制虛線圓形 int diameter = 100; int x = 50; int y = 50; g2d.drawOval(x, y, diameter, diameter); // 繪制虛線橢圓 int width = 150; int height = 75; x = 200; y = 50; g2d.draw(new Ellipse2D.Double(x, y, width, height)); } public static void main(String[] args) { JFrame frame = new JFrame("Draw Dashed Circle"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new DrawDashedCircle()); frame.setSize(400, 400); frame.setVisible(true); } }
這里,dashPattern數組定義了虛線的樣式。數組中的值交替表示實線段的長度和空白段的長度。BasicStroke的構造函數使用這個數組來創建虛線筆觸。
如何在Java Swing中創建一個可以動態調整大小的圓形?
創建一個可以動態調整大小的圓形,需要監聽組件的大小改變事件,并根據新的尺寸重新計算圓形的位置和大小。
import javax.swing.*; import java.awt.*; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; public class ResizableCircle extends JPanel { private int diameter; private int x; private int y; public ResizableCircle() { addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { // 組件大小改變時,重新計算圓形的大小和位置 int width = getWidth(); int height = getHeight(); diameter = math.min(width, height) - 20; // 留出一些邊距 x = (width - diameter) / 2; y = (height - diameter) / 2; repaint(); // 重新繪制 } }); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; // 設置顏色 g2d.setColor(Color.GREEN); // 繪制圓形 g2d.drawOval(x, y, diameter, diameter); } public static void main(String[] args) { JFrame frame = new JFrame("Resizable Circle"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new ResizableCircle()); frame.setSize(300, 300); frame.setVisible(true); } }
這段代碼的關鍵在于ComponentAdapter的使用。componentResized方法會在組件大小改變時被調用,我們在這個方法中重新計算圓形的大小和位置,并調用repaint()方法來觸發重繪。 Math.min(width, height)確保圓形始終位于組件的內部,并且是適應最小尺寸的正方形。
繪制橢圓時,如何讓橢圓始終保持在窗口中心?
要使橢圓始終保持在窗口中心,需要根據窗口的大小動態計算橢圓的坐標。
import javax.swing.*; import java.awt.*; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; public class CenteredOval extends JPanel { private int width; private int height; private int x; private int y; public CenteredOval() { addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { // 組件大小改變時,重新計算橢圓的位置 int panelWidth = getWidth(); int panelHeight = getHeight(); // 橢圓的寬度和高度可以固定,也可以根據窗口大小動態調整 width = panelWidth / 3; // 寬度為窗口的1/3 height = panelHeight / 4; // 高度為窗口的1/4 x = (panelWidth - width) / 2; y = (panelHeight - height) / 2; repaint(); // 重新繪制 } }); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; // 設置顏色 g2d.setColor(Color.BLUE); // 繪制橢圓 g2d.drawOval(x, y, width, height); } public static void main(String[] args) { JFrame frame = new JFrame("Centered Oval"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new CenteredOval()); frame.setSize(400, 300); frame.setVisible(true); } }
關鍵在于componentResized方法中,我們獲取了面板的寬度和高度,然后計算出橢圓的左上角坐標,使其位于面板的中心。 橢圓的寬度和高度可以根據需求進行調整,這里設置為面板寬度和高度的1/3和1/4,確保橢圓不會超出窗口邊界。