Java Swing - пример динамического рисования фигур

В этой статье мы создаем приложение, которое случайным образом помещает фигуры вJPanel. Пользователь может выбирать между различными формами, поддерживаемыми нашим приложением, а также размером, который будет нарисован. В качестве дизайнерского решения наше приложение может делать круги и звездочки. Вы можете скачать пример в конце статьи и поэкспериментировать с другими формами, случайными цветами, случайными размерами и т. Д.
1. Круг
Конструктор получает координаты x и y круга, а диаметр установлен на 10 пикселей.
Circle.java
package com.techfou.dynamicshapes;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
public class Circle {
int x, y, width, height;
public Circle(int x, int y) {
this.x = x;
this.y = y;
}
public void draw(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
Ellipse2D.Double circle = new Ellipse2D.Double(x, y, 10, 10);
g2d.setColor(Color.GRAY);
g2d.fill(circle);
}
}
2. Звезда
Чтобы нарисовать звезду, мы используем классGeneralPath. У нас есть два массива для координат x и y, которым должен следоватьGeneralPath, чтобы нарисовать звезду. Линия начинается с (9,0) и проходит через набор точек, чтобы достичь (3,18) и, наконец,closePath(), что означает «вернуться туда, откуда мы начали».
Нарисуйте это на бумаге, используяJava’s coordinate system, и у вас будет звезда! There is not one way to draw a star. You can play around with the numbers and make your own star, or other shapes even!
Star.java
package com.techfou.dynamicshapes;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.GeneralPath;
public class Star {
int x, y, width, height;
public Star(int x, int y) {
this.x = x;
this.y = y;
}
public void draw(Graphics g) {
int xPoints[] = {9, 15, 0, 18, 3};
int yPoints[] = {0, 18, 6, 6, 18};
Graphics2D g2d = (Graphics2D) g;
GeneralPath star = new GeneralPath();
star.moveTo(xPoints[0] + x, yPoints[0] + y);
for (int i = 1; i < xPoints.length; i++) {
star.lineTo(xPoints[i] + x, yPoints[i] + y);
}
star.closePath();
g2d.setColor(Color.YELLOW);
g2d.fill(star);
}
}
3. Приложение
Вmain method мы спрашиваем у пользователя количество и тип фигур, затем создаемJFrame и инициализируемJPanel с помощью вызова классаDynamicShapes. КлассDynamicShapes, расширяющийJPanel, через методpaintComponent() рисует формы, которые были добавлены кList. List заполняется конструктором классаDynamicShapes, который вызывает метод для каждой формы в соответствии с вводом пользователя.
DynamicShapes.java
package com.example.dynamicshapes;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class DynamicShapes extends JPanel {
private List
Выход:
Введите «200» и нажмите «ОК».

Выберите «Оба» и нажмите «ОК».

В результате в пределахJPanel случайным образом размещены 100 звезд и 100 кружков:

100 форм во всех комбинациях:

Скачать исходный код
Скачать -DrawShapesDynamically.zip (4 КБ)