Мне нужно отобразить имя файла без расширения в JFileChooser (открытый режим). Как? - PullRequest
1 голос
/ 08 февраля 2012

Я использую 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 возвращает не правильное имя файла, и курсор всегда переходит вверх, когда я выбираю какой-либо файл

1 Ответ

2 голосов
/ 08 февраля 2012

Основная причина в том, что пользовательский интерфейс не использует имя представления в качестве текста в поле имени. Который может или может быть хорошей идеей, не знаю. Если вы действительно этого хотите, вы можете сделать это вручную, либо в подклассе JFileChooser, либо в PropertyChangeListener, вот переопределение:

    fc = new JFileChooser() {

        @Override
        public void setSelectedFile(File file) {
            super.setSelectedFile(file);
            ((BasicFileChooserUI) getUI()).setFileName(getName(file));
        }

    };
    fc.setFileView(new MyView());

Редактировать

outch ... не ожидал такого неправильного поведения пользовательского интерфейса :-( Проблема в том, что все действия воссоздают файловый объект на основе содержимого textField (вместо использования свойства selectedFile объекта chooser) Теперь, если эта строка имеет обрезанное расширение, файл не найден. Единственный выход - заменить действия ... которые могут не работать.

Таким образом, этот ответ бесполезен, извините.

...