JavaFX - 居中文件选择器弹出窗口

3

目前,我在JavaFX的主窗口中设置一个按钮点击事件来弹出一个文件选择器。但是,文件选择器总是出现在屏幕左上角。有没有办法将它居中显示在屏幕上?

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

2
据我所知,不会。但是,如果您在showOpenDialog中指定一个非空所有者,则显示文件选择器的窗口将相对于所有者窗口适当地定位。 - James_D
1个回答

2

JavaFX没有公开文件选择器定位的API。

以下信息是针对Mac的,因为我在Mac上进行了一些测试而不是Windows。 Windows的行为会略有不同,但无论如何,建议仍然是设置文件选择器的所有者。

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

我不建议执行以下步骤:现在,如果您没有在showOpenDialog中指定所有者stage(例如,只传递null),那么JavaFX Mac实现将创建一个无模式对话框,水平居中放置在屏幕上,并且从屏幕顶部向下100个像素(非视网膜,例如,JavaFX坐标类型)。虽然这样做可能不是明智之举,因为该对话框不是窗口模态(像sheet一样),并且实际上与应用程序窗口不匹配,例如,您可以将应用程序窗口置于前台并将其移动到屏幕上的其他位置,而文件对话框则独立于应用程序窗口。此外,您可以关闭应用程序窗口,文件对话框仍然可见。用户必须单独关闭文件选择器对话框,这种行为有点错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接