【问题标题】:JavaFX - center file chooser popupJavaFX - 中心文件选择器弹出窗口
【发布时间】:2015-10-23 14:56:16
【问题描述】:

目前,当我在主窗口中单击按钮时,我会在 JavaFX 中显示 FileChooser 弹出窗口。 FileChooser 弹出窗口出现在屏幕的左上角。有没有办法让它在屏幕中居中?

    FileChooser fileChooser = new FileChooser();
    File selectedFile = fileChooser.showOpenDialog(null);

【问题讨论】:

  • 据我所知,没有。但是,如果您在 showOpenDialog 中指定非 null 所有者,则显示文件选择器的窗口将相对于所有者窗口适当定位。

标签: java user-interface javafx filechooser


【解决方案1】:

JavaFX 不公开用于文件选择器定位的 API。

以下信息是特定于 Mac 的,因为我在 Mac 而不是 Windows 上进行了一些测试。 Windows 的行为会略有不同,但在任何情况下仍然建议设置文件选择器的所有者。

在 Mac 上,当您为文件选择器设置所有者时,我强烈建议您这样做,内部 JavaFX 实现使其成为 sheet。要设置文件选择器的所有者,请将其传递给适当的显示函数fileChooser.showOpenDialog(parentStage)。默认行为是工作表在应用程序标题栏上水平居中放置,并直接位于应用程序标题栏下方。当您拖动应用程序标题栏时,工作表会随之移动。内部 JavaFX 实现不会通过 Java 实例公开sheet positioning API,因此无法更改文件选择器表的位置。

我不推荐的下一部分:现在,如果您没有在 showOpenDialog 中指定所有者阶段(例如,您只需传递 null),那么 JavaFX Mac 实现将创建一个在屏幕上水平居中的无模式对话框并从屏幕顶部向下定位 100(非视网膜,例如 JavaFX 坐标类型)像素。我不建议这样做,因为对话框不是窗口模式(就像工作表一样),并且根本与应用程序窗口不匹配,例如,您可以将应用程序窗口放在前面并移动它和屏幕周围的文件对话框相互独立。您也可以关闭应用程序窗口,文件对话框仍然可见。用户必须单独关闭文件选择器对话框,这是一种错误的行为。

【讨论】: