私はJavaFxを初めて使用しています。アプリケーションを作成していて、スイングコンポーネントを使用している間に提供されたJDialogと同様のものが必要でした。私は新しいステージを作成することでそれを解決しましたが、今はボタンをクリックするだけで新しいステージを閉じることができます。 (はい、xボタンも機能しますが、ボタン上にもボタンが必要です)。状況を説明するには: 私はシーンからメインステージを作成するメインクラスを持っています。私はFXMLを使っています。JavaFX2:内部でステージ(サブステージ)を閉じる
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("Builder.fxml"));
stage.setTitle("Ring of Power - Builder");
stage.setScene(new Scene(root));
stage.setMinHeight(600.0);
stage.setMinWidth(800.0);
stage.setHeight(600);
stage.setWidth(800);
stage.centerOnScreen();
stage.show();
}
今、私はFXMLおよび適切な制御クラスを介して行われたすべての管理項目やメニューやものを、持って表示されたメインウィンドウに表示されます。これは、[ヘルプ]メニューの[バージョン情報]を含めることに決めた部分です。
@FXML
private void menuHelpAbout(ActionEvent event) throws IOException{
Parent root2 = FXMLLoader.load(getClass().getResource("AboutBox.fxml"));
Stage aboutBox=new Stage();
aboutBox.setScene(new Scene(root2));
aboutBox.centerOnScreen();
aboutBox.setTitle("About Box");
aboutBox.setResizable(false);
aboutBox.initModality(Modality.APPLICATION_MODAL);
aboutBox.show();
}
ボックスウィンドウについて再び制御クラスとFXMLを介して作成されて見られるように:についてこのように活性化される - だから私は、イベントが時にメニューのヘルプに行く持っています。画像、テキストエリア、ボタンがあります。そのボタンをクリックすると、AboutBox.javaクラス内のaboutBoxという新しいステージを閉じることができます。
自分自身がこれを行うことができる唯一の方法は、 public static Stage aboutBoxを定義することでした。 がBuilder.javaクラス内にあり、閉じるボタンのアクションイベントを処理するメソッドのAboutBox.java内のものを参照します。しかし、どういうわけか、それはまったくきれいで正しいとは感じません。もっと良い方法はありますか?
アドバイスをいただきありがとうございます。
このようにステージを閉じると、onCloseRequestイベントハンドラ(存在する場合)をバイパスします。私は行を追加しますstage.getOnCloseRequest()。ハンドル(null); stage.close()の直前。 – beardedlinuxgeek
@ beardedlinuxgeekありがとうございました。私はこの問題を抱えていました。私の窓は閉まっていましたが、私が登録したイベントハンドラは呼び出されていませんでした。あなたのソリューションは問題を解決しました。 –