【问题标题】:jfilechooser how to hide full path in folder name in DIRECTORIES_ONLY modejfilechooser 如何在 DIRECTORIES_ONLY 模式下隐藏文件夹名称中的完整路径
【发布时间】:2012-07-05 10:23:48
【问题描述】:

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

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

【问题讨论】:

    标签: jfilechooser directory


    【解决方案1】:

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

    基本上我在 JFileChooser 中添加了一个 PropertyChangeListener 覆盖 propertyChange 方法以执行以下操作 我聆听属性更改 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 );
    

    【讨论】:

    • 我正在使用 Java 7,其中 chooser_ui 没有 setFileName 方法。否则,它可以完美运行。 (我想更改对话框标题,所以chooser_ui 行与我无关。)
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 对不起,这并没有解决我的问题,我想出了下面的解决方案。问题是当我选择了一个文件夹并按保存时,我希望程序覆盖该文件夹或选择它作为我的导出目标。我不想打开文件夹。
    猜你喜欢
    • 2011-04-13
    • 2011-07-10
    • 2016-01-31
    • 2018-04-21
    • 1970-01-01
    • 2020-07-14
    • 2012-12-17
    • 1970-01-01
    • 2011-08-30
    相关资源
    最近更新 更多