防止 window 在 FileChooser 处于活动状态时被聚焦

Prevent window from being focused when FileChooser is active

我有一个简单的 JavaFX 应用程序,我正在通过调用 showOpenDialog().

打开一个 FileChooser

我想在文件选择器打开时禁止选择我的主要 window,并尽可能将其放在主要 window 的顶部。

感谢您提供的任何帮助。

在显示舞台之前,根据需要将stage.initModality调用为APPLICATION_MODALWINDOW_MODAL。同时调用 stage.initOwner .

Stage stage = new Stage();
stage.initModality(Modality.WINDOW_MODAL);
stage.initOwner(pane.getScene().getWindow());
stage.setScene(new Scene(content));
stage.show();

注意 您不能将上述规则应用于 FileChooser。但是,您可以使用 showOpenDialog(Window ownerWindow)

fileChooser.showOpenDialog(stage)

所以当你打开filechooser.Main时window会被屏蔽

来自 showOpenDialog 的文档(强调我的):

Shows a new file open dialog. The method doesn't return until the displayed open dialog is dismissed. The return value specifies the file chosen by the user or null if no selection has been made. If the owner window for the file dialog is set, input to all windows in the dialog's owner chain is blocked while the file dialog is being shown.

因此,由于所有者链,在这种情况下 primaryStagesecondStage 都被阻止了:

primaryStage.setScene(new Scene(new VBox(), 300, 300));
primaryStage.show();

Stage secondStage = new Stage();
secondStage.setScene(new Scene(new VBox(), 50, 50));
secondStage.initOwner(primaryStage);

secondStage.show();

FileChooser fc = new FileChooser();
fc.showOpenDialog(secondStage);

如果将最后一行修改为

fc.showOpenDialog(primaryStage);

primaryStage 被阻止,但 secondStage 可用。


最后,如果不执行这一行:

secondStage.initOwner(primaryStage);

你称最后一行为

fc.showOpenDialog(secondStage);

primaryStage没有被屏蔽,但是secondStage被屏蔽了。