jfilechooser как да скриете пълния път в името на папката в режим DIRECTORIES_ONLY

Имам jfilechooser, настроен на режим DIRECTORIES_ONLY. Това, което не ми харесва в текущия ми jfilechooser, е, че избира папки в режим directories_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