libro
www.tuyano.com
初心者のためのJavaFXプログラミング入門

シェイプを使ったベクターグラフィック (4/6)

作成:2015-04-04 11:49
更新:2015-04-04 11:49

■Javaソースコードでシェイプを利用する

FXMLを使わず、Javaのソースコード内から直接シェイプのオブジェクトを作成し、ステージに組み込んで表示することもできます。実際にやってみましょう。

下にサンプルを挙げておきます。ここではcreateShapeというメソッドを用意し、その中で四角形と円のシェイプを描画しています。最初にFXMLで作ったサンプルと同じようなものですから、両者を比較してみると違いがよくわかるでしょう。

●インスタンスの作成
シェイプのクラスは、RectangleCircleと、どちらもFXMLのタグと同じ名前ですね。インスタンスの作成は、いずれも必須の属性を引数に指定する形で行っています。こんな感じですね。
new Rectangle( 横位置 , 縦位置 , 横幅 , 高さ )
new Circle( 中心横位置 , 中心縦位置 , 半径 )

これらのクラスでは、引数なしのデフォルトコンストラクタから数種類のコンストラクタが用意されており、いろいろなやり方でインスタンスが作成できます。が、まぁ必須項目となる属性の値をすべて引数に用意した形が一番わかりやすいでしょう。

●属性の設定
作成後、fillstrokestrokeWidthの属性を設定するためのメソッドを呼び出しています。Rectangleならば以下の部分ですね。
r.setFill(Color.RED);
r.setStroke(Color.BLUE);
r.setStrokeWidth(3);
FXMLのタグに用意されていた属性は、「set属性名」というメソッドで値を設定することができます。また、今回は使いませんでしたが、「get属性名」あるいは「is属性名」というメソッドで値を取得することも可能です。

●色の値について
今回、setFillsetStrokeでは、Colorクラスのフィールドを指定しています。これらは、先にCanvasで利用しましたね。塗りつぶしと線分の色をColorで設定する、といった基本的な考え方は、Canvasの描画とほぼ同じなのです。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

package com.tuyano.libro;
    
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.stage.Stage;

public class App extends Application {
    
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) {
        Pane root = new Pane();
        createShape(root);
        Scene scene = new Scene(root,300,300);
        stage.setScene(scene);
        stage.show();
    }
    
    public void createShape(Pane root){
        Rectangle r = new Rectangle(50, 50, 100, 100);
        r.setFill(Color.RED);
        r.setStroke(Color.BLUE);
        r.setStrokeWidth(3);
        root.getChildren().add(r);
        Circle c = new Circle(150, 150, 50);
        c.setFill(Color.YELLOW);
        c.setStroke(Color.GREEN);
        c.setStrokeWidth(10);
        root.getChildren().add(c);
    }
}

※関連コンテンツ

「初心者のためのJavaFXプログラミング入門」に戻る