我在开放模式下使用“ JFileChooser”。我需要显示不带扩展名的“文件名”字段。怎么样??我知道FileView。它将删除文件系统文件中的扩展名,但会将扩展名留在“文件名” 说明中的所选文件中
这是我的FileView代码:
public class JQSFileView extends FileView{ @Override public String getName(File file){ return FilenameUtils.removeExtension(file.getName()); } }
我用这个:
fc.addPropertyChangeListener(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY, new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { File selectedFile = fc.getSelectedFile(); String path = selectedFile.getPath(); path=FilenameUtils.removeExtension(path); fc.setSelectedFile(new File(path)); } });
但是JFileChooser返回的文件名不正确,当我选择某些文件时,光标总是跳到上
根本原因是ui不在name字段中使用视图的名称作为文本。不知道这可能是一个好主意。如果确实需要,可以在JFileChooser的子类或PropertyChangeListener中手动进行操作,这里有一个替代:
fc = new JFileChooser() { @Override public void setSelectedFile(File file) { super.setSelectedFile(file); ((BasicFileChooserUI) getUI()).setFileName(getName(file)); } }; fc.setFileView(new MyView());
编辑
outch …没想到ui会有如此多的错误行为:-(问题是,所有操作都基于textField的内容重新创建了一个文件对象(而不是使用选择器的selectedFile属性)如果该字符串的扩展名被修剪,则找不到该文件,唯一的解决方法是替换操作…这可能不起作用。
总之,这个答案是没有用的,对不起。