Автор оригинала: Marilena.
В этой статье мы создадим приложение, которое случайным образом размещает фигуры на JPanel . Пользователь может выбирать между различными формами, которые поддерживает наше приложение, а также количеством, которое будет нарисовано. В качестве дизайнерского решения наше приложение может создавать круги и звезды. Вы можете скачать пример в конце статьи и поэкспериментировать с большим количеством форм, случайных цветов, случайных размеров и т.д.
1. Круг
Конструктор получает координаты x и y окружности, в то время как диаметр установлен в 10 пикселей.
package com.mkyong.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. Звезда
Чтобы нарисовать звезду, мы используем Общий путь класс. У нас есть два массива для координат x и y, по которым Общий путь должен следовать, чтобы нарисовать звезду. Линия начинается с (9,0) и проходит через множество точек, чтобы достичь (3,18) и, наконец, closePath() , что означает “вернуться туда, откуда мы начали”.
Нарисуйте это на бумаге с помощью Система координат Java и у тебя будет звезда! Существует не один способ нарисовать звезду. Вы можете поиграть с цифрами и сделать свою собственную звезду или даже другие фигуры!
package com.mkyong.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 мы запрашиваем у пользователя количество и тип фигур, затем создаем JFrame и инициализируем JPanel вызовом класса DynamicShapes . Класс Динамические фигуры , который расширяет JPanel , рисует с помощью метода paintComponent() фигуры, которые были добавлены в Список . Список заполняется из конструктора класса Dynamic Shapes , который вызывает метод для каждой фигуры в соответствии с вводом пользователя.
package com.mkyong.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” и нажмите “ОК”.
Выберите “Оба” и нажмите “ОК”.
В результате получается 100 звезд и 100 кругов, случайным образом размещенных в JPanel :
100 фигур во всех комбинациях:
Скачать Исходный Код
Рекомендации
- Учебник по координатам Java
- java.awt.геом. Общий путь JavaDoc
- джавакс, качели. JPanel JavaDoc-панель
Оригинал: “https://mkyong.com/swing/java-swing-draw-shapes-dynamically-example/”