Java中如何畫圓 詳解圓形和橢圓的繪制

Java中繪制圓形和橢圓,1. 使用graphics或graphics2d類的drawoval()和filloval()方法;2. 通過設置相同width和height繪制圓形;3. 控制圓形粗細使用basicstroke類并調用setstroke()方法;4. 修改顏色使用setcolor()方法;5. 繪制虛線圓形需定義dashpattern數組并傳入basicstroke構造函數;6. 動態調整大小需監聽componentresized事件重繪;7. 橢圓居中需根據窗口尺寸計算x和y坐標。

Java中如何畫圓 詳解圓形和橢圓的繪制

Java中繪制圓形和橢圓,主要依賴于Graphics或Graphics2D類提供的方法。核心是理解drawOval()和fillOval()這兩個方法,它們實際上繪制的是一個矩形的內切橢圓,當矩形是正方形時,就變成了圓形。

Java中如何畫圓 詳解圓形和橢圓的繪制

繪制圓形和橢圓的核心在于理解Graphics類中的drawOval(int x, int y, int width, int height)和fillOval(int x, int y, int width, int height)方法。x和y定義了橢圓外切矩形的左上角坐標,width和height則定義了矩形的寬度和高度。

Java中如何畫圓 詳解圓形和橢圓的繪制

繪制圓形,只需要保證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)。

Java中如何畫圓 詳解圓形和橢圓的繪制

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,確保橢圓不會超出窗口邊界。

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享