FXMLでGUIをデザインしよう (4/6)
作成:2014-12-06 11:21
更新:2014-12-06 11:21
更新:2014-12-06 11:21
■FXMLをロードする
FXMLは、当たり前ですが書いただけでは動きません。Javaのクラス側でこれをロードし、インスタンス化してウインドウに組み込んで初めて使うことができます。これは通常、Applicationクラスのstartメソッドで処理を記述して作業をします。では、FXML利用の流れをまとめましょう。
・Paneをロードする
FXMLをロードしてPaneインスタンスを作成します。これは、javafx.fxmlパッケージにある「FXMLLoader」というクラスを利用します。この中の「load」クラスメソッドを呼び出すことで、FXMLファイルをロードしインスタンスを取得できます。
・Sceneに追加する
FXMLからPaneインスタンスが取得できれば、後は簡単です。Sceneインスタンスを作成する際にこのPaneを引数指定してSceneを用意し、Stageに設定して利用すればいいのです。Sceneは、
こんな感じでインスタンスを作成できましたね。FXMLを利用しても、Paneインスタンスさえ得られれば、後は何ら変わりはないのです。
下に、実際の利用例を挙げておきましょう。ここでは、com.tuyano.libro.Appクラスと同じ場所に「app.fxml」というファイル名でFXMLファイルが配置してある、という前提でコードを記述しています。実際に先ほどのFXMLを配置して動かしてみましょう。ちゃんとウインドウが表示されますよ!
・Paneをロードする
FXMLをロードしてPaneインスタンスを作成します。これは、javafx.fxmlパッケージにある「FXMLLoader」というクラスを利用します。この中の「load」クラスメソッドを呼び出すことで、FXMLファイルをロードしインスタンスを取得できます。
FXMLLoader.load(《URL》)引数にはURLインスタンスを渡します。FXMLファイルがApplicationクラスと同じ場所に保管してあるなら、Classの「getResource」メソッドでロードするのがよいでしょう。すなわち、こんな感じになります。
変数 = FXMLLoader.load(getClass().getResource("○○.fxml"));この「○○.fxml」のところに、ロードするFXMLファイル名を指定すればいいわけですね。注意したいのは、取得されるインスタンスです。これは、Objectインスタンスにキャストされています。ですから取得後に本来のPaneインスタンスにキャストして利用するようにします。
・Sceneに追加する
FXMLからPaneインスタンスが取得できれば、後は簡単です。Sceneインスタンスを作成する際にこのPaneを引数指定してSceneを用意し、Stageに設定して利用すればいいのです。Sceneは、
Scene 変数 = new Scene(《Paneインスタンス》, 横幅, 高さ );
こんな感じでインスタンスを作成できましたね。FXMLを利用しても、Paneインスタンスさえ得られれば、後は何ら変わりはないのです。
下に、実際の利用例を挙げておきましょう。ここでは、com.tuyano.libro.Appクラスと同じ場所に「app.fxml」というファイル名でFXMLファイルが配置してある、という前提でコードを記述しています。実際に先ほどのFXMLを配置して動かしてみましょう。ちゃんとウインドウが表示されますよ!
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
package com.tuyano.libro;
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class App extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
BorderPane root;
try {
root = (BorderPane)FXMLLoader.load(getClass().getResource("app.fxml"));
Scene scene = new Scene(root,200,100);
stage.setScene(scene);
stage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
}
※関連コンテンツ