|
|
RoundRectangle2D クラスの使い方 |
H.Kamifuji . |
RoundRectangle2Dクラスは角丸長方形の物体を表すクラスです。 ここでは、RoundRectangle2D クラスについて、事例にて説明します。 現在(2021/08)では、JDK-16.0.2 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2021/11)では、JDK-17.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2023/04)では、JDK-20.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2024/10)では、JDK-23 にアップされています。一部、上位互換について、見直しを行っていきます。 |
|
RoundRectangle2Dクラスは角が丸い長方形を表すクラスです。 クラス図は次のようになっています。 java.lang.Object ⇒ java.awt.geom.RectangularShape ⇒ java.awt.geom.RoundRectangle2D public abstract class RoundRectangle2D extends RectangularShapeRoundRectangle2Dクラスはabstractクラスとなっていますので実際に使用する場合はサブクラスであるRoundRectangle2D.DoubleクラスとRoundRectangle2D.Floatクラスを利用します。 RoundRectangle2D.DoubleクラスRoundRectangle2D.Doubleクラスは座標や幅と高さの値としてdouble型の値を使用するクラスです。クラス図は次のようになっています。 java.lang.Object ⇒ java.awt.geom.RectangularShape ⇒ java.awt.geom.RoundRectangle2D ⇒ java.awt.geom.RoundRectangle2D.Double public static class RoundRectangle2D.Double extends RoundRectangle2D implements Serializableコンストラクタは次の2つが用意されています。
1番目のコンストラクタは2番目のコンストラクタで座標の初期値として座標を(0, 0)、幅と高さもそれぞれ0、角の弧の半径を0に指定した場合と同じです。それでは2番目のコンストラクタを確認してみます。 RoundRectangle2D.Double public RoundRectangle2D.Double(double x, double y, double w, double h, double arcw, double arch)指定された double 型の座標から RoundRectangle2D を構築および初期化します。 パラメータ: x - 新しく構築される RoundRectangle2D の X 座標 y - 新しく構築される RoundRectangle2D の Y 座標 w - 新しく構築される RoundRectangle2D に 設定される幅 h - 新しく構築される RoundRectangle2D に 設定される高さ arcw - 新しく構築された RoundRectangle2D の 角を丸めるのに使う弧の幅 arch - 新しく構築された RoundRectangle2D の 角を丸めるのに使う弧の高さ 1番目の引数でx座標を2番目の引数でy座標をそれぞれdouble型の値で指定します。この2つが長方形の領域の左上の座標となります。そして3番目の引数で幅を4番目の引数で高さをそれぞれdouble型の値で指定します。 RoundRectangle2Dは角が丸い長方形となっています。角がどの程度丸くするのかを5番目と6番目の引数で指定します。1つ1つの角に対して5番目の引数で指定した幅と6番目の引数で指定した高さの分だけ角を丸くします。 具体的には次のように記述します。 RoundRectangle2D.Double rec = new RoundRectangle2D.Double(10.0d, 10.0d, 20.0d, 12.0d, 1.0d, 1.0d); RoundRectangle2D.FloatクラスRoundRectangle2D.Floatクラスは座標や幅と高さの値としてfloat型の値を使用するクラスです。クラス図は次のようになっています。 java.lang.Object ⇒ java.awt.geom.RectangularShape ⇒ java.awt.geom.RoundRectangle2D ⇒ java.awt.geom.RoundRectangle2D.Float public static class RoundRectangle2D.Float extends RoundRectangle2D implements Serializableコンストラクタは次の2つが用意されています。
1番目のコンストラクタは2番目のコンストラクタで座標の初期値として座標を(0, 0)、幅と高さもそれぞれ0、角の弧の半径を0に指定した場合と同じです。それでは2番目のコンストラクタを確認してみます。 RoundRectangle2D.Float public RoundRectangle2D.Float(float x, float y, float w, float h, float arcw, float arch)指定された float 型の座標から RoundRectangle2D を構築および初期化します。 パラメータ: x - 新しく構築される RoundRectangle2D の X 座標 y - 新しく構築される RoundRectangle2D の Y 座標 w - 新しく構築される RoundRectangle2D に 設定される幅 h - 新しく構築される RoundRectangle2D に 設定される高さ arcw - 新しく構築された RoundRectangle2D の 角を丸めるのに使う弧の幅 arch - 新しく構築された RoundRectangle2D の 角を丸めるのに使う弧の高さ 1番目の引数でx座標を2番目の引数でy座標をそれぞれfloat型の値で指定します。この2つが長方形の領域の左上の座標となります。そして3番目の引数で幅を4番目の引数で高さをそれぞれfloat型の値で指定します。 RoundRectangle2Dは角が丸い長方形となっています。角がどの程度丸くするのかを5番目と6番目の引数で指定します。1つ1つの角に対して5番目の引数で指定した幅と6番目の引数で指定した高さの分だけ角を丸くします。 具体的には次のように記述します。 RoundRectangle2D.Float rec = new RoundRectangle2D.Float(10.0f, 10.0f, 20.0f, 12.0f, 1.0f, 1.0f);RoundRectangle2D.DoubleクラスとRoundRectangle2D.Floatクラスは内部に保持する値がdouble型かfloat型かの違いがあるだけですので次のページ以降では基本的にRoundRectangle2D.Doubleクラスについて内容を確認していきます。 |
RoundRectangle2D.Doubleクラスで座標や幅と高さ、そして角の丸み度合いの値を設定するにはコンストラクタで指定する以外にオブジェクトを作成した後でメソッドを使って設定することが出来ます。RoundRectangle2D.Doubleクラスで用意されている「setRoundRect」メソッドを使います。etRoundRect public void setRoundRect(double x, double y, double w, double h, double arcw, double arch)この RoundRectangle2D の位置、サイズ、および角の半径を、指定された double 値に設定します。 パラメータ: x - この RoundRectangle2D の位置を 設定する X 座標 y - この RoundRectangle2D の位置を 設定する Y 座標 w - この RoundRectangle2D に 設定する幅 h - この RoundRectangle2D に 設定する高さ arcw - この RoundRectangle2D の弧を 設定する幅 arch - この RoundRectangle2D の弧を 設定する高さ 1番目の引数でx座標を2番目の引数でy座標をそれぞれdouble型の値で指定します。この2つが長方形の領域の左上の座標となります。そして3番目の引数で幅を4番目の引数で高さをそれぞれdouble型の値で指定します。 RoundRectangle2Dは角が丸い長方形となっています。角がどの程度丸くするのかを5番目と6番目の引数で指定します。1つ1つの角に対して5番目の引数で指定した幅と6番目の引数で指定した高さの分だけ角を丸くします。 具体的には次のように記述します。 RoundRectangle2D.Double rec = new RoundRectangle2D.Double(); rec.setRoundRect(10.0d, 10.0d, 20.0d, 12.0d, 1.0d, 1.0d); サンプルプログラム下記のサンプルを実行してみよう。/** * 座標、幅、高さ、角の丸み度合いを設定する */ import java.awt.geom.RoundRectangle2D; class RoundRectangle2DTest1{ public static void main(String args[]){ RoundRectangle2D.Double rec = new RoundRectangle2D.Double(); rec.setRoundRect(10.0d, 10.0d, 20.0d, 12.0d, 1.0d, 1.0d); double x = rec.x; double y = rec.y; double w = rec.width; double h = rec.height; double aw = rec.arcwidth; double ah = rec.archeight; System.out.println("(x, y)=(" + x + "," + y + ")"); System.out.println("(w, h)=(" + w + "," + h + ")"); System.out.println("(arcw, arch)=(" + aw + "," + ah + ")"); } }上記をコンパイルした後で実行すると次のように表示されます。 [xxxxxx@dddddddddd RoundRectangle2DTest]$ java RoundRectangle2DTest1 (x, y)=(10.0,10.0) (w, h)=(20.0,12.0) (arcw, arch)=(1.0,1.0) |
RoundRectangle2D.Doubleクラスで座標や幅などの値を取得するにはメソッドを使って取得する方法とフィールドの値を参照する方法があります。まずはメソッドで取得する方法を確認します。 まず座標を取得してみます。RoundRectangle2D.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型の値を取得できます。 次に幅と高さを取得してみます。RoundRectangle2D.Doubleクラスで用意されている「getWidth」メソッドと「getHeight」メソッドを使います。 getWidthメソッド: getWidth public double getWidth()表示枠矩形の幅を double 精度で返します。 戻り値: 表示枠矩形の幅 getHeightメソッド: getHeight public double getHeight()表示枠矩形の高さを double 精度で返します。 戻り値: 表示枠矩形の高さ 「getWidth」メソッドは戻り値としてオブジェクトに保存されている幅を表すdouble型の値を取得できます。「getHeight」メソッドは戻り値としてオブジェクトに保存されている高を表すdouble型の値を取得できます。 最後に角の丸み度合いを表す弧の幅と弧の高さを取得してみます。RoundRectangle2D.Doubleクラスで用意されている「getArcWidth」メソッドと「getArcHeight」メソッドを使います。 getArcWidthメソッド: getArcWidth public double getArcWidth()角を丸める弧の幅を返します。 戻り値: この RoundRectangle2D の角を 丸める弧の幅 getArcHeightメソッド: getArcHeight public double getArcHeight()角を丸める弧の高さを返します。 戻り値: この RoundRectangle2D の角を 丸める弧の高さ 「getArcWidth」メソッドは戻り値としてオブジェクトに保存されている弧の幅を表すdouble型の値を取得できます。「getArcHeight」メソッドは戻り値としてオブジェクトに保存されている弧の高を表すdouble型の値を取得できます。 具体的には次のように記述します。 RoundRectangle2D.Double rec = new RoundRectangle2D.Double(10.0d, 10.0d, 20.0d, 12.0d, 1.0d, 1.0d); double x = rec.getX(); double y = rec.getY(); double w = rec.getWidth(); double h = rec.getHeight(); double aw = rec.getArcWidth(); double ah = rec.getArcHeight(); フィールドを参照するRoundRectangle2D.Doubleではフィールドとして「x」「y」「width」「height」「arcwidth」「archeight」と言う6つのdouble型の値を保持するフィールドを持っておりオブジェクトから直接参照することが出来ます。具体的には次のように記述します。 RoundRectangle2D.Double rec = new RoundRectangle2D.Double(10.0d, 10.0d, 20.0d, 12.0d, 1.0d, 1.0d); double x = rec.x; double y = rec.y; double w = rec.width; double h = rec.height; double aw = rec.arcwidth; double ah = rec.archeight; サンプルプログラム下記のサンプルを実行してみよう。/** * 座標、幅、高さ、角の丸み度合いを取得する */ import java.awt.geom.RoundRectangle2D; class RoundRectangle2DTest2{ public static void main(String args[]){ RoundRectangle2D.Double rec = new RoundRectangle2D.Double(10.0d, 10.0d, 20.0d, 12.0d, 1.0d, 1.0d); double x = rec.getX(); double y = rec.getY(); double w = rec.getWidth(); double h = rec.getHeight(); double aw = rec.getArcWidth(); double ah = rec.getArcHeight(); System.out.println("(x, y)=(" + x + "," + y + ")"); System.out.println("(w, h)=(" + w + "," + h + ")"); System.out.println("(arcw, arch)=(" + aw + "," + ah + ")"); } }上記をコンパイルした後で実行すると次のように表示されます。 [xxxxxx@dddddddddd RoundRectangle2DTest]$ java RoundRectangle2DTest2 (x, y)=(10.0,10.0) (w, h)=(20.0,12.0) (arcw, arch)=(1.0,1.0) |
|