在我的swing应用程序中,我已将UI外观和感觉设置为:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
在Windows系统中,应用程序内的用户需要使用
JFileChooser
来选择文件。在Windows中,JFileChooser
的外观是本地的。但是在Mac上不是这样的。
JFileChooser面板的截图如下:
在我的swing应用程序中,我已将UI外观和感觉设置为:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
JFileChooser
来选择文件。在Windows中,JFileChooser
的外观是本地的。但是在Mac上不是这样的。
JFileChooser面板的截图如下:
FileDialog
。缺点是它的可配置性要少得多。由于我的Java应用程序需要打开一些专有文件包,因此在从Java 6迁移到Java 8时遇到了许多问题。
FileDialog仍然提供更好的外观,但将捆绑文件视为目录。首先修复此问题的方法是将FileDialog设置为选择目录,这仍然允许浏览文件包内部,但也允许整个文件包被选择。
System.setProperty("apple.awt.fileDialogForDirectories", "true");
我并不满意之前尝试的解决方案,于是我尝试了其他选项,包括VAqua LookAndFeel for macOS。这个界面看起来非常棒,但有时候并不能显示所有的UI元素(有些JTree在启动时被隐藏了,JFileChooser看起来很好,但在侧边栏中仍然没有显示网络驱动器)。
最后,我找到了一个简单的属性,设置它之后可以像在Java 6下一样使用FileDialog。当然,如果我们想选择文件而不是目录,上面的那行代码必须删除。
System.setProperty("apple.awt.use-file-dialog-packages", "true");
我在一个关于对话框个性化的旧示例项目中发现了这个
针对Windows、Linux和Mac的文件选择器实现在任何操作系统上都不是100%正确的。
不幸的是,如果您真的需要这个功能,您需要寻找JFileChooser的替代品,或者编写自己的外观和感觉。
Java在跟进操作系统变化方面存在困难。