gpt4 book ai didi

JavaFX - 如何专注于一个阶段

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:24:57 25 4
gpt4 key购买 nike

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com