Java Swing - Exemple de dessin dynamique de formes
Dans cet article, nous créons une application qui place des formes au hasard sur unJPanel
. L'utilisateur peut choisir entre les différentes formes prises en charge par notre application ainsi que le montant qui sera tiré. En tant que décision de conception, notre application peut créer des cercles et des étoiles. Vous pouvez télécharger l'exemple à la fin de l'article et expérimenter avec plus de formes, de couleurs aléatoires, de tailles aléatoires, etc.
1. Le cercle
Le constructeur reçoit les coordonnées x et y du cercle tandis que le diamètre est défini sur 10px.
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. L'étoile
Pour dessiner l'étoile, nous utilisons la classeGeneralPath
. Nous avons deux tableaux pour les coordonnées x et y que lesGeneralPath
doivent suivre pour dessiner l'étoile. La ligne commence à partir de (9,0) et se déplace à travers l'ensemble des points pour atteindre (3,18) et enfinclosePath()
qui signifie «retour à l'endroit où nous avons commencé».
Dessinez ceci sur papier en utilisantJava’s coordinate system et vous aurez une étoile! 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. L'application
Dans lesmain method
, nous demandons à l'utilisateur la quantité et le type de formes, puis créons lesJFrame
et initialisons lesJPanel
avec un appel à la classeDynamicShapes
. La classeDynamicShapes
qui étendJPanel
dessine via la méthodepaintComponent()
les formes qui ont été ajoutées auxList
. LeList
est rempli par le constructeur de la classeDynamicShapes
qui appelle la méthode pour chaque forme en fonction de l'entrée de l'utilisateur.
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
Sortie:
Tapez "200" et cliquez sur "OK"
Sélectionnez "Les deux" et cliquez sur "OK"
Le résultat est 100 étoiles et 100 cercles placés au hasard dans lesJPanel
:
100 formes dans toutes les combinaisons:
Télécharger le code source
Télécharger -DrawShapesDynamically.zip (4 KB)