Java Swing –図形を動的に描画する例
この記事では、JPanel
にランダムに図形を配置するアプリケーションを作成します。 ユーザーは、アプリケーションがサポートするさまざまな形状と描画量を選択できます。 設計上の決定として、アプリケーションは円と星を作成できます。 記事の最後に例をダウンロードして、より多くの形状、ランダムな色、ランダムなサイズなどを試すことができます。
1. サークル
コンストラクターは、直径が10pxに設定されている間、円のxおよびy座標を受け取ります。
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
クラスを使用します。 星を描くためにGeneralPath
が従わなければならないx座標とy座標の2つの配列があります。 線は(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
を作成し、DynamicShapes
クラスを呼び出してJPanel
を初期化します。 JPanel
を拡張するDynamicShapes
クラスは、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」と入力して「OK」をクリックします
「両方」を選択し、「OK」をクリックします
結果は、JPanel
内にランダムに配置された100個の星と100個の円です。
すべての組み合わせで100の形状:
ソースコードをダウンロード
ダウンロード-DrawShapesDynamically.zip(4 KB)