別ウインドウを開く

アプリから別ウインドウを開く場合の方法。
画面にボタンがあり、ボタン押下で別ウインドウを開く場合を想定します。


最初わからなかったから、JavaDoc見回すとWindowってクラスがあったので、
このクラスを作ってインスタンス生成するのかと思ってたらどうやら違ったようで・・・・。
こんなしょうもないことで散々悩んでしまった。


惜しかったけど、正解はそのWindowクラスの子クラスのStageクラスのインスタンスを生成すればいいみたい。


ソースコードを抜粋します。
下記でbuttonRegistはButtonクラスのインスタンス。登録ボタンのことですね。
primaryStageはstartメソッドの引数のStageクラスのインスタンスのことです。

// ボタンにイベントハンドラを設定。ここではクリックしたときの動作を記述します。
buttonRegist.addEventHandler(MouseEvent.MOUSE_CLICKED
    new EventHandler<MouseEvent>() {
        public void handle(MouseEvent e) {
            // 新しいウインドウを生成
            Stage newStage = new Stage();
            // モーダルウインドウに設定
            newStage.initModality(Modality.APPLICATION_MODAL);
            // オーナーを設定
            newStage.initOwner(primaryStage);
            
            // 新しいウインドウ内に配置するコンテンツを生成           
            HBox hbox = new HBox();
            Label label = new Label("登録画面");
            label.setFont(new Font(20d));
            hbox.getChildren().add(label);
                       
            newStage.setScene(new Scene(hbox));

            // 新しいウインドウを表示
            newStage.show();
        }
    });


ただこれだけのことだった・・・・。
1点注意で、initModalityでModality.APPLICATION_MODALにしとかないと、
ウインドウを開いた後、元のウインドウを操作できる。
元のウインドウで登録ボタンを押下すると別のウインドウを開くことができてしまう。


動かしてみよう

開いたウインドウがしょぼいけど、ここはこれから追加していこう。