2

我将 jfilechooser 设置为 DIRECTORIES_ONLY 模式。我不喜欢我当前的 jfilechooser 是在 directory_only 模式中选择文件夹会在文件夹名称中显示完整的绝对路径。有没有办法覆盖这种行为,只显示文件夹名称,就像在文件的情况下一样?

我的 jfilechooser 旨在为即将创建的文件夹指定一个名称,以将内容保存到或者如果选择了一个文件夹,则覆盖该文件夹

4

2 回答 2

3

我不是用 java 编码,而是用 kawa(jvm 方案)编码,所以我只能尽可能地给出类似 java 的解决方案。

基本上,我在我的 JFileChooser Override propertyChange 方法中添加了一个 PropertyChangeListener 来执行以下操作我监听属性更改 SELECTED_FILE_CHANGED_PROPERTY 并将文件名显示手动设置为 FileChooserUI,它是 JFileChooser 的一部分。

请注意,所有这些只是为了美观,所选择的文件夹无论如何都不会改变。只是文件名显示不应以这种方式显示完整路径,而应仅显示您刚刚选择的文件夹的名称。

这是我在不测试的情况下编写 java 代码的尝试。当我有更多时间时,我会再次测试这个。

JFileChooser folder_chooser = new JFileChooser();

folder_chooser.setFileSelectionMode (JFileChooser.DIRECTORIES_ONLY);

PropertyChangeListener folder_name_changer = new PropertyChangeListener () {
    public void propertyChange(PropertyChangeEvent e) {
        String property_name = e.getPropertyName();
        JFileChooser chooser = e.getSource();
        if (property_name.equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY) {
            File selected_file = chooser.getSelectedFile();
            FileChooserUI chooser_ui = chooser.getUI();

            // BasicFileChooserUI is the subclass that implements a setFileName method
            if ( selected_file != null && (chooser_ui instanceof BasicFileChooserUI)) {
                chooser_ui.setFileName( selected_file.getFileName() );
            }
        } 
    }
};

folder_chooser.addPropertyChangeListener( folder_name_changer );
于 2014-01-25T14:51:31.253 回答
2

我遇到过同样的问题。我删除了关于将模式设置为 DIRECTORIES_ONLY 的部分,而是使用了文件过滤器,以便只有目录会显示在浏览视图中:

chooser.setFileFilter(new FileFilter() {
  def accept(f: File) = f.isDirectory
})

(抱歉,这是 Scala,但应该足够清楚)。

但是,这对于您希望用户能够选择要覆盖的目录的第二个用例来说不会特别好。

于 2012-11-20T20:25:04.503 回答