防止 window 在 FileChooser 处于活动状态时被聚焦
Prevent window from being focused when FileChooser is active
我有一个简单的 JavaFX 应用程序,我正在通过调用 showOpenDialog()
.
打开一个 FileChooser
我想在文件选择器打开时禁止选择我的主要 window,并尽可能将其放在主要 window 的顶部。
感谢您提供的任何帮助。
在显示舞台之前,根据需要将stage.initModality
调用为APPLICATION_MODAL
或WINDOW_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.
因此,由于所有者链,在这种情况下 primaryStage
和 secondStage
都被阻止了:
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
被屏蔽了。
我有一个简单的 JavaFX 应用程序,我正在通过调用 showOpenDialog()
.
FileChooser
我想在文件选择器打开时禁止选择我的主要 window,并尽可能将其放在主要 window 的顶部。
感谢您提供的任何帮助。
在显示舞台之前,根据需要将stage.initModality
调用为APPLICATION_MODAL
或WINDOW_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.
因此,由于所有者链,在这种情况下 primaryStage
和 secondStage
都被阻止了:
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
被屏蔽了。