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