我请求对当前使用 JFileChooser 的小程序进行一些更改。
主要的抱怨之一是文件选择器使用起来很麻烦,因为它的行为与本机小部件不同,尤其是在导航到根级别时。
因此,知道了这一点以及 JFileChooser 遭受的所有其他问题(例如 Windows 上的 zip 文件缓存......),我想知道 java 世界中是否存在可行的替代方案。
当然,也有使用本机小部件的 SWT,但将小程序大小增加 25 并不是一个真正的选择。那么,文件选择器有更好的纯 java 实现吗?
我请求对当前使用 JFileChooser 的小程序进行一些更改。
主要的抱怨之一是文件选择器使用起来很麻烦,因为它的行为与本机小部件不同,尤其是在导航到根级别时。
因此,知道了这一点以及 JFileChooser 遭受的所有其他问题(例如 Windows 上的 zip 文件缓存......),我想知道 java 世界中是否存在可行的替代方案。
当然,也有使用本机小部件的 SWT,但将小程序大小增加 25 并不是一个真正的选择。那么,文件选择器有更好的纯 java 实现吗?
AWTFileDialog
实际上确实使用了本机组件,但与大多数 AWT 与 Swing 的问题一样,它的灵活性和可定制性远不如 Swing 的JFileChooser
. 所以有一个权衡:JFileChooser
可能有一个笨重的用户界面,但它通常更适合大多数用途。但是,如果您真的希望您的文件选择对话框看起来和感觉像原生对话框,那么您可以使用FileDialog
.
我知道这有点晚了,但它可能会帮助其他用户。您可以将应用程序的 UI 自定义为操作系统的 UI:
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {e.printStackTrace(); }
您也可以尝试XFileDialog。还没有尝试太多,但看起来值得评估。
如果可用,我围绕 JavaFX 的文件选择器编写了一个包装器。如果包含在您的应用程序中,您可以替换
JFileChooser fileChooser = new JFileChooser();
和
JFileChooser fileChooser = new NativeJFileChooser();
然后它将使用底层平台的本机(和现代)文件选择器。并非一切都 100% 相同,因此请确保事后对其进行测试,但大多数事情都应该顺利进行。
正如@htw 所说,如果外观是您的主要关注点,请使用FileDialog 。通过使用FileDialog请注意,您将无法使用许多方便的方法...
我用过VFSJFileChooser几次。它没有 JFileChooser 错误(由于 zip 文件加载缓慢,仅限 Windows),但界面不是“原生”的。