JavaFX - 如何专注于一个阶段

标签 java javafx filechooser

我的应用程序有一个主应用程序阶段,可从中打开第二个窗口。我只想关注一个阶段。

我有 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/

相关文章:

DirectoryChooser - 多个目录

Java数组索引问题

java - Spring Boot 应用程序未加载到独立的 tomcat 中

java - 无法在 Netbeans IDE 打包的浏览器中运行简单的 JavaFX

Android 文件再次选择对话框

java - 用于选择文件并将文本读入 GUI 的按钮 (JTextArea)

java - 任何增加 Rational Clearcase 远程客户端内存设置的方法

java - 为什么在反序列化期间从对象的类中删除变量不会引发异常?

css 不适用于表格 View 的选定行以更改文本颜色

java - 如何将 ListView 的内容变成 ArrayList?