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 КБ)