ui.java
package fxdemo; import java.io.File; import java.net.URL; import javafx.scene.layout.BorderPane; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class ui extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) throws Exception { BorderPane root = FXMLLoader.load(getClass().getResource("sample.fxml")); Scene scene = new Scene(root); stage.setTitle("Menu Test"); stage.setScene(scene); stage.show(); } }
ここではBorderPaneを使っているが、AnchorPaneやPaneでもできないことはない。
ただし、BorderPane以外を使う場合は以下のfxml内の<top>を外さないとエラーになる
sample.fxml
<?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <BorderPane prefHeight="150.0" prefWidth="300.0" xmlns:fx="http://javafx.com/fxml"> <top> <MenuBar> <menus> <Menu text="落葉高木" > <MenuItem text="銀杏" /> <Menu text="桜"> <Menu text="エドヒガン" > <MenuItem text="天城吉野" /> <MenuItem text="雨情枝垂" /> <MenuItem text="薄毛大島" /> </Menu> <Menu text="チョウジザクラ" > <MenuItem text="オオミネザクラ" /> <MenuItem text="オクチョウジザクラ" /> <MenuItem text="チチブザクラ" /> </Menu> </Menu> <Menu text="松" > <MenuItem text="蝦夷松" /> <MenuItem text="唐松" /> <MenuItem text="五葉松" /> </Menu> <Menu text="梅" /> </Menu> <Menu text="落葉低木" /> </menus> </MenuBar> </top> </BorderPane>
コンパイル
>javac fxdemo\ui.java
実行
java fxdemo.ui
JavaFXで複数の窓を表示する。
で示したコードの、Fxml1.javaを以下のように書き換える
import javafx.scene.Scene; import javafx.stage.Stage; import javafx.stage.Modality; public class Fxml1 extends Application { public static void main(String[] args) { launch(args); } public Stage newStage = null; @Override public void start(Stage stage) throws Exception { AnchorPane root = FXMLLoader.load(getClass().getResource("sample.fxml")); Scene scene = new Scene(root); stage.setTitle("FXML Test"); stage.setScene(scene); stage.show(); newStage = new Stage(); newStage.initModality(Modality.NONE); newStage.initOwner(stage); newStage.setScene( new Scene(FXMLLoader.load(getClass().getResource("sample.fxml") ) ) ); newStage.show(); } }
新しくStageをnewして、setSceneしてshowするだけ。
途中、initModalityの引数に関しては以下。
http://docs.oracle.com/javafx/2/api/javafx/stage/Modality.html
の三つがある。