我将jfilechooser设置为DIRECTORIES_ONLY模式。 我不喜欢我当前的jfilechooser是在directories_only模式中选择文件夹显示文件夹名称中的完整绝对路径。 有没有办法覆盖此行为只显示文件夹名称,就像文件一样?
我的jfilechooser意味着 指定要将内容保存到的文件夹的名称 要么 如果选择了文件夹,则覆盖该文件夹
答案 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,但它应该足够清楚了。)
但是,这对于您的第二个用例来说效果不是很好,但是,您希望用户能够选择要覆盖的目录。