jfilechooser, как скрыть полный путь в имени папки в режиме DIRECTORIES_ONLY

У меня jfilechooser установлен в режим DIRECTORIES_ONLY. Что мне не нравится в моем текущем jfilechooser, так это то, что при выборе папок в режиме directory_only отображается полный абсолютный путь в имени папки. Есть ли способ переопределить это поведение, чтобы просто отображать имя папки, как в случае с файлом?

Мой jfilechooser предназначен для указания имени папки, которая будет создана, чтобы сохранить содержимое в ИЛИ, если папка выбрана, перезаписать эту папку


person Teong Leong    schedule 05.07.2012    source источник


Ответы (2)


Я не кодирую в java, а в kawa (схема jvm), поэтому я могу дать решение только настолько похожее на java, насколько я могу.

В основном я добавил PropertyChangeListener в свой метод JFileChooser Override 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 );
person Teong Leong    schedule 25.01.2014
comment
Я работаю в Java 7, в которой chooser_ui не имеет метода setFileName. В противном случае он работает идеально. (Я хотел изменить заголовок диалога, поэтому строки chooser_ui для меня не имеют значения.) - person Agi Hammerthief; 10.01.2019

Я была такая же проблема. Я удалил бит об установке режима DIRECTORIES_ONLY и вместо этого использовал фильтр файлов, чтобы в представлении просмотра отображались только каталоги:

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

(Извините, это Scala, но должно быть достаточно ясно).

Однако это не будет особенно хорошо работать для вашего второго варианта использования, когда вы хотите, чтобы пользователь мог выбрать каталог для перезаписи.

person Michael Stover    schedule 20.11.2012
comment
Извините, это не решило мою проблему, я придумал решение ниже. Проблема заключалась в том, что когда у меня выбрана папка и я нажимаю «Сохранить», я хочу, чтобы программа перезаписала папку или выбрала ее в качестве места назначения для моего экспорта. Я не хочу открывать папку. - person Teong Leong; 25.01.2014