jfilechooser如何在DIRECTORIES_ONLY模式下隐藏文件夹名称中的完整路径

时间:2012-07-05 10:23:49

标签: jfilechooser directory

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

我的jfilechooser意味着 指定要将内容保存到的文件夹的名称 要么 如果选择了文件夹,则覆盖该文件夹

2 个答案:

答案 0 :(得分:3)

我不是用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(JFileChooserSELECTED_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 );

答案 1 :(得分:2)

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

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

(对不起,那是Scala,但它应该足够清楚了。)

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