|
|
Polygon クラスの使い方 |
H.Kamifuji . |
Polygonクラスは多角形を表すクラスです。 ここでは、Polygon クラスについて、事例にて説明します。 現在(2021/08)では、JDK-16.0.2 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2021/11)では、JDK-17.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2023/04)では、JDK-20.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2024/10)では、JDK-23 にアップされています。一部、上位互換について、見直しを行っていきます。 |
|
Polygonクラスは多角形を表すクラスです。 クラス図は次のようになっています。 java.lang.Object ⇒ java.awt.Polygon public class Polygon extends Object implements Shape, Serializableコンストラクタは次の2つが用意されています。
基本となる2番目のコンストラクタを確認してみます。 Polygon public Polygon(int[] xpoints, int[] ypoints, int npoints)指定されたパラメータから Polygon を構築および初期化します。 パラメータ: xpoints - X 座標の配列 ypoints - Y 座標の配列 npoints - Polygon の点の 総数 例外: NegativeArraySizeException - npoints の値が 負の場合 IndexOutOfBoundsException - npoints が xpoints の長さまたは ypointsの長さより大きい場合 NullPointerException - xpoints または ypoints が null の場合 1番目の引数には多角形の頂点のx座標の配列をint型の配列として指定します。2番目の引数には多角形の頂点のy座標の配列をint型の配列として指定します。多角形の頂点の数だけの配列となります。 3番目の引数には多角形の頂点の数をint型の値で指定します。 具体的には次のように記述します。 int[] xpoints = {30, 150, 170, 120, 30}; int[] ypoints = {20, 40, 140, 110, 80}; int npoints = xpoints.length; Polygon polygon = new Polygon(xpoints, ypoints, npoints); サンプルプログラム下記のサンプルを実行してみよう。/** * Polygonクラス */ import javax.swing.*; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.*; import java.awt.Polygon; public class PolygonTest1 extends JPanel{ public static void main(String[] args){ JFrame frame = new JFrame(); PolygonTest1 app = new PolygonTest1(); frame.getContentPane().add(app); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 300, 200); frame.setTitle("タイトル"); frame.setVisible(true); } public void paintComponent(Graphics g){ Graphics2D g2 = (Graphics2D)g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); int[] xpoints = {30, 150, 170, 80, 30}; int[] ypoints = {20, 40, 120, 140, 80}; int npoints = xpoints.length; Polygon polygon = new Polygon(xpoints, ypoints, npoints); g2.draw(polygon); } }上記をコンパイルした後で実行すると次のように表示されます。 |
コンストラクタで作成された多角形に対して新しい頂点を追加する方法を確認します。Polygonクラスで用意されている「addPoint」メソッドを使います。addPoint public void addPoint(int x, int y)この Polygon に指定された座標を追加します。 この Polygon のバウンディングボックスを計算する getBounds またはcontains などの演算がすでに実行されている場合、このメソッドはバウンディングボックスを更新します。 パラメータ: x - 指定された X 座標 y - 指定された Y 座標 新しい頂点の座標を1番目の引数と2番目の引数でint型の値として指定します。 具体的には次のように記述します。 int[] xpoints = {30, 150, 170, 120, 30}; int[] ypoints = {20, 40, 140, 110, 80}; int npoints = xpoints.length; Polygon polygon = new Polygon(xpoints, ypoints, npoints); polygon.addPoint(40, 50); サンプルプログラム下記のサンプルを実行してみよう。/** * 頂点を追加する */ import javax.swing.*; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.*; import java.awt.Polygon; import java.awt.Color; public class PolygonTest2 extends JPanel{ public static void main(String[] args){ JFrame frame = new JFrame(); PolygonTest2 app = new PolygonTest2(); frame.getContentPane().add(app); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 300, 200); frame.setTitle("タイトル"); frame.setVisible(true); } public void paintComponent(Graphics g){ Graphics2D g2 = (Graphics2D)g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); int[] xpoints = {60, 180, 200, 130, 60}; int[] ypoints = {20, 40, 120, 140, 110}; int npoints = xpoints.length; Polygon polygon = new Polygon(xpoints, ypoints, npoints); g2.draw(polygon); polygon.addPoint(40, 70); g2.setPaint(Color.PINK); g2.draw(polygon); } }上記をコンパイルした後で実行すると次のように表示されます。 |
作成された多角形を指定した分だけ移動させる方法を確認します。Polygonクラスで用意されている「translate」メソッドを使います。translate public void translate(int deltaX, int deltaY)Polygon の頂点を x 軸に沿って deltaX、および y 軸に沿って deltaY 移動します。 パラメータ: deltaX - X 軸に沿って移動する距離 deltaY - Y 軸に沿って移動する距離 1番目の引数にX軸方向に移動する距離をint型の値で指定します。2番目の引数にY軸方法に移動する距離をint型の値で指定します。 具体的には次のように記述します。 int[] xpoints = {30, 150, 170, 120, 30}; int[] ypoints = {20, 40, 140, 110, 80}; int npoints = xpoints.length; Polygon polygon = new Polygon(xpoints, ypoints, npoints); polygon.translate(10, 20); サンプルプログラム下記のサンプルを実行してみよう。/** * 位置を移動する */ import javax.swing.*; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.*; import java.awt.Polygon; import java.awt.Color; public class PolygonTest3 extends JPanel{ public static void main(String[] args){ JFrame frame = new JFrame(); PolygonTest3 app = new PolygonTest3(); frame.getContentPane().add(app); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 300, 200); frame.setTitle("タイトル"); frame.setVisible(true); } public void paintComponent(Graphics g){ Graphics2D g2 = (Graphics2D)g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); int[] xpoints = {60, 180, 200, 130, 60}; int[] ypoints = {20, 40, 120, 140, 110}; int npoints = xpoints.length; Polygon polygon = new Polygon(xpoints, ypoints, npoints); g2.draw(polygon); polygon.translate(30, 20); g2.setPaint(Color.PINK); g2.draw(polygon); } }上記をコンパイルした後で実行すると次のように表示されます。 |
|