|
|
Arc2D クラスの使い方 |
H.Kamifuji . |
Arc2Dクラスは円弧の物体を表すクラスです。 ここでは、Arc2D クラスについて、事例にて説明します。 現在(2021/08)では、JDK-16.0.2 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2021/11)では、JDK-17.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2023/04)では、JDK-20.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2024/10)では、JDK-23 にアップされています。一部、上位互換について、見直しを行っていきます。 |
|
Arc2Dクラスは円弧を表すクラスです。左上の座標及び幅と高さを指定して長方形の領域を作成し、その長方形の領域に内接する楕円を作成します。そして楕円の中で開始角度と使用角度を指定して円弧を作成します。 クラス図は次のようになっています。 java.lang.Object ⇒ java.awt.geom.RectangularShape ⇒java.awt.geom.Arc2D public abstract class Arc2D extends RectangularShapeArc2Dクラスはabstractクラスとなっていますので実際に使用する場合はサブクラスであるArc2D.DoubleクラスとArc2D.Floatクラスを利用します。 Arc2D.DoubleクラスArc2D.Doubleクラスは円弧を特定するための各値としてdouble型の値を使用するクラスです。クラス図は次のようになっています。 java.lang.Object ⇒ java.awt.geom.RectangularShape ⇒ java.awt.geom.Arc2D ⇒ java.awt.geom.Arc2D.Double public static class Arc2D.Double extends Arc2D implements Serializableコンストラクタは次の4つが用意されています。
いくつかコンストラクタがありますが基本となる2番目のコンストラクタを確認してみます。 Arc2D.Double public Arc2D.Double(double x, double y, double w, double h, double start, double extent, int type)新しい弧を構築し、指定された位置、サイズ、角の大きさ、および閉じ方の種類に初期化します。 パラメータ: x - 弧の表示枠矩形の 左上隅の X 座標 y - 弧の表示枠矩形の 左上隅の Y 座標 w - この弧が一部を構成する 楕円の幅 h - この弧が一部を構成する 楕円の高さ start - 弧の始角 (度単位) extent - 弧の角の大きさ (度単位) type - 弧の閉じ方の種類 (Arc2D.OPEN、Arc2D.CHORD、または Arc2D.PIE) 1番目の引数でx座標を2番目の引数でy座標をそれぞれdouble型の値で指定します。この2つが長方形の領域の左上の座標となります。そして3番目の引数で幅を4番目の引数で高さをそれぞれdouble型の値で指定します。作成される楕円はこの長方形の領域に内接する楕円となります。5番目の引数で開始角度を6番目の引数で使用角度をそれぞれdouble型の値で指定します。 7番目の引数で円弧の閉じ方を表すint型の値を指定します。指定できる値は次の通りです。
具体的には次のように記述します。 Arc2D.Double arc = new Arc2D.Double(10.0d, 10.0d, 40.0d, 20.0d, 45.0d, 45.0d, Arc2D.PIE); Arc2D.FloatクラスArc2D.Floatクラスは楕円を特定するための各値としてfloat型の値を使用するクラスです。クラス図は次のようになっています。 java.lang.Object ⇒ java.awt.geom.RectangularShape ⇒ java.awt.geom.Arc2D ⇒ java.awt.geom.Arc2D.Float public static class Arc2D.Float extends Arc2D implements Serializableコンストラクタは次の4つが用意されています。
いくつかコンストラクタがありますが基本となる2番目のコンストラクタを確認してみます。 Arc2D.Float public Arc2D.Float(float x, float y, float w, float h, float start, float extent, int type)新しい弧を構築し、指定された位置、サイズ、角の大きさ、および閉じ方の種類に初期化します。 パラメータ: x - 弧の表示枠矩形の 左上隅の X 座標 y - 弧の表示枠矩形の 左上隅の Y 座標 w - この弧が一部を構成する 楕円の幅 h - この弧が一部を構成する 楕円の高さ start - 弧の始角 (度単位) extent - 弧の角の大きさ (度単位) type - 弧の閉じ方の種類 (Arc2D.OPEN、Arc2D.CHORD、または Arc2D.PIE) 1番目の引数でx座標を2番目の引数でy座標をそれぞれdouble型の値で指定します。この2つが長方形の領域の左上の座標となります。そして3番目の引数で幅を4番目の引数で高さをそれぞれdouble型の値で指定します。作成される楕円はこの長方形の領域に内接する楕円となります。5番目の引数で開始角度を6番目の引数で使用角度をそれぞれdouble型の値で指定します。 7番目の引数で円弧の閉じ方を表すint型の値を指定します。指定できる値はArc2D.Doubleと同じです。 具体的には次のように記述します。 Arc2D.Float arc = new Arc2D.Float(10.0f, 10.0f, 40.0f, 20.0f, 45.0f, 45.0f, Arc2D.PIE);Arc2D.DoubleクラスとArc2D.Floatクラスは内部に保持する値がdouble型かfloat型かの違いがあるだけですので次のページ以降では基本的にArc2D.Doubleクラスについて内容を確認していきます。 |
Arc2D.Doubleクラスで各設定値をコンストラクタで指定する以外にオブジェクトを作成した後でメソッドを使って設定することが出来ます。Arc2D.Doubleクラスで用意されている「setArc」メソッドを使います。setArc public void setArc(double x, double y, double w, double h, double angSt, double angExt, int closure)この弧の位置、サイズ、角の大きさ、閉じ方の種類を、指定された double 値に設定します。 パラメータ: x - 弧の左上隅の X 座標 y - 弧の左上隅の Y 座標 w - この弧が一部を構成する 楕円の幅 h - この弧が一部を構成する 楕円の高さ angSt - 弧の始角 (度単位) angExt - 弧の角の大きさ (度単位) closure - 弧の閉じ方の種類 (Arc2D.OPEN、Arc2D.CHORD、または Arc2D.PIE) 1番目の引数でx座標を2番目の引数でy座標をそれぞれdouble型の値で指定します。この2つが長方形の領域の左上の座標となります。そして3番目の引数で幅を4番目の引数で高さをそれぞれdouble型の値で指定します。作成される楕円はこの長方形の領域に内接する楕円となります。5番目の引数で開始角度を6番目の引数で使用角度をそれぞれdouble型の値で指定します。 7番目の引数で円弧の閉じ方を表すint型の値を指定します。指定できる値は次の通りです。
具体的には次のように記述します。 Arc2D.Double arc = new Arc2D.Double(); arc.setArc(10.0d, 10.0d, 40.0d, 20.0d, 45.0d, 45.0d, Arc2D.PIE); サンプルプログラム下記のサンプルを実行してみよう。/** * メソッドを使って設定 */ import javax.swing.*; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.*; public class Arc2DTest1 extends JPanel{ public static void main(String[] args){ JFrame frame = new JFrame(); Arc2DTest1 app = new Arc2DTest1(); 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); Arc2D.Double arc = new Arc2D.Double(); arc.setArc(20.0d, 20.0d, 250.0d, 140.0d, 45.0d, 45.0d, Arc2D.PIE); g2.draw(arc); } }上記をコンパイルした後で実行すると次のように表示されます。 ![]() |
Arc2D.Doubleクラスで座標や開始角度などの値を取得するにはメソッドを使って取得する方法とフィールドの値を参照する方法があります。まずはメソッドで取得する方法を確認します。 まず座標を取得してみます。Arc2D.Doubleクラスで用意されている「getX」メソッドと「getY」メソッドを使います。 getXメソッド: getX public double getX()表示枠矩形の左上隅の X 座標を double 精度で返します。 弧はこの RectangularShape の表示枠矩形と部分的に内接していることに注意してください。 戻り値: 表示枠矩形の 左上隅の X 座標 getYメソッド: getY public double getY()表示枠矩形の左上隅の Y 座標を double 精度で返します。 弧はこの RectangularShape の表示枠矩形と部分的に内接していることに注意してください。 戻り値: 表示枠矩形の 左上隅の Y 座標 「getX」メソッドは戻り値としてオブジェクトに保存されているX座標を表すdouble型の値を取得できます。「getY」メソッドは戻り値としてオブジェクトに保存されているY座標を表すdouble型の値を取得できます。 次に幅と高さを取得してみます。Arc2D.Doubleクラスで用意されている「getWidth」メソッドと「getHeight」メソッドを使います。 getWidthメソッド: getWidth public double getWidth()表示枠矩形の幅を double 精度で返します。 弧はこの RectangularShape の表示枠矩形と部分的に内接していることに注意してください。 戻り値: 表示枠矩形の幅 getHeightメソッド: getHeight public double getHeight()表示枠矩形の高さを double 精度で返します。 弧はこの RectangularShape の表示枠矩形と部分的に内接していることに注意してください。 戻り値: 表示枠矩形の高さ 「getWidth」メソッドは戻り値としてオブジェクトに保存されている幅を表すdouble型の値を取得できます。「getHeight」メソッドは戻り値としてオブジェクトに保存されている高を表すdouble型の値を取得できます。 次に開始角度と使用角度を取得してみます。Arc2D.Doubleクラスで用意されている「getAngleStart」メソッドと「getAngleExtent」メソッドを使います。 getAngleStartメソッド: getAngleStart public double getAngleStart()弧の始角を返します。 戻り値: 弧の始角 (度) を表す double 値 getAngleExtentメソッド: getAngleExtent public double getAngleExtent()弧の角の大きさを返します。 戻り値: 弧の角の大きさ (度単位) を表す double 値 具体的には次のように記述します。 Arc2D.Double arc = new Arc2D.Double(10.0d, 10.0d, 20.0d, 12.0d, 45.0d, 45.0d); double x = arc.getX(); double y = arc.getY(); double w = arc.getWidth(); double h = arc.getHeight(); double s = arc.getAngleStart(); double e = arc.getAngleExtent(); フィールドを参照するArc2D.Doubleではフィールドとして「x」「y」「width」「height」「start」「extent」と言う6つのdouble型の値を保持するフィールドを持っておりオブジェクトから直接参照することが出来ます。具体的には次のように記述します。 Arc2D.Double arc = new Arc2D.Double(10.0d, 10.0d, 20.0d, 12.0d, 45.0d, 45.0d); double x = arc.x; double y = arc.y; double w = arc.width; double h = arc.height; double s = arc.start; double e = arc.extent; サンプルプログラム下記のサンプルを実行してみよう。/** * 各設定値を取得する */ import javax.swing.*; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.*; public class Arc2DTest2 extends JPanel{ public static void main(String[] args){ JFrame frame = new JFrame(); Arc2DTest2 app = new Arc2DTest2(); 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); Arc2D.Double arc = new Arc2D.Double(); arc.setArc(20.0d, 20.0d, 250.0d, 140.0d, 45.0d, 90.0d, Arc2D.PIE); g2.draw(arc); double x = arc.getX(); double y = arc.getY(); double w = arc.getWidth(); double h = arc.getHeight(); double s = arc.getAngleStart(); double e = arc.getAngleExtent(); g2.draw(new Rectangle2D.Double(x, y, w, h)); g2.drawString("Start:" + s, 160, 100); g2.drawString("Extent:" + e, 160, 120); } }上記をコンパイルした後で実行すると次のように表示されます。 ![]() |
|