<AI>
JavaFXで stage.hide()(または window.hide())メソッドを使って非表示にした子画面(Stage)を再表示するには、
もう一度 stage.show() メソッドを呼び出します。
もし画面が最小化または背面に隠れている可能性がある場合は、stage.toFront() を併用すると確実に手前に表示できます。
再表示の基本コード
java
// 子画面のStageインスタンスが subStage である場合
subStage.show(); // 再表示する
subStage.toFront(); // 必要に応じて最前面に持ってくる
具体的な実装例
以下は、ボタンを押すと子画面を隠し、別のボタン(または同じ参照)で再表示する簡単なサンプルです。
java
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class MainApp extends Application {
private Stage subStage; // 子画面の参照を保持しておく
@Override
public void start(Stage primaryStage) {
// --- 子画面の作成 ---
VBox subRoot = new VBox(10);
Button hideButton = new Button("子画面を隠す");
subRoot.getChildren().add(hideButton);
subStage = new Stage();
subStage.setTitle("子画面");
subStage.setScene(new Scene(subRoot, 200, 150));
// 子画面側の「隠す」ボタンの処理
hideButton.setOnAction(e -> subStage.hide());
// --- 親画面の作成 ---
VBox mainRoot = new VBox(10);
Button showButton = new Button("子画面を表示する");
mainRoot.getChildren().add(showButton);
// 親画面側の「表示」ボタンの処理
showButton.setOnAction(e -> {
subStage.show(); // 再表示
subStage.toFront(); // 手前に持ってくる
});
primaryStage.setTitle("親画面");
primaryStage.setScene(new Scene(mainRoot, 300, 200));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
注意点・ポイント
・インスタンスの保持: hide() を呼んでも Stage のオブジェクトやメモリは保持されているため、
close() のように再度 new Stage() から作り直す必要はありません。
最初に作成した Stage 変数をフィールド等で保持しておき、再度 show() を呼ぶだけで同じ状態のまま復元されます。
・前面への移動: 隠したウィンドウが他のウィンドウの背後に隠れて見えづらくなるのを防ぐため、show() の直後に toFront() を呼ぶのがおすすめです。