我的应用程序有一个主应用程序阶段,可从中打开第二个窗口。我只想关注一个阶段。
我有 2 个问题需要解决:
1 - 如何将焦点
放在第二个阶段
(一个fileChooser OpenDialog)?即,在用户单击“打开”或“取消”之前,我无法切换到主应用程序阶段。
2 - 如何强制用户在关闭主阶段之前关闭第二阶段
?
现在,我可以在第二阶段 (OpenDialog) 仍在运行时关闭主窗口。
谢谢。
最佳答案
您可以使用 Modality 的组合和 Ownership阶段。
subStage.initOwner(stage)
-> 确保子阶段与其所有者一起移动。
subStage.initModality(Modality.WINDOW_MODAL)
-> 确保 substage
阻止输入事件从其所有者传递到所有窗口 (父)到它的根。
如果您想阻止输入事件到同一应用程序的所有窗口,您也可以使用Modality.APPLICATION_MODAL
,但来自其子层次结构的窗口除外。
Dialog默认情况下遵循模态和阻塞方式。 Dialog 的默认模式是 Modality.APPLICATION_MODAL
,您可以向其添加 initOwner(...)
。
注意: 您不能将上述规则应用于 FileChooser 。但是,您可以使用 showOpenDialog(Window ownerWindow)
为了它。
fileChooser.showOpenDialog(stage);
完整示例
import javafx.application.Application;
import javafx.stage.Modality;
import javafx.stage.Stage;
public class Main extends Application {
@Override public void start(Stage stage) {
stage.setTitle("Main Stage");
stage.setWidth(500);
stage.setHeight(500);
stage.show();
Stage subStage = new Stage();
subStage.setTitle("Sub Stage");
subStage.setWidth(250);
subStage.setHeight(250);
subStage.initOwner(stage);
subStage.initModality(Modality.WINDOW_MODAL);
subStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
关于JavaFX - 如何专注于一个阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29514248/