Создание файла из компонента jFileChooser - PullRequest
4 голосов
/ 09 февраля 2011

Я использую JFileChooser как часть функции экспорта.Я бы хотел, чтобы пользователь мог выбрать файл из средства просмотра файлов JFileChooser или ввести имя файла в текстовое поле имени файла.Из того, что я прочитал, можно получить это значение с помощью метода getSelectedFile(), поэтому у меня есть несколько слушателей, которые вызывают getSelectedFile() и пытаются выполнить некоторые проверки перед выполнением экспорта.

Проблема I 'Я сталкиваюсь с тем, что метод getSelectedFile() возвращает ноль, когда я ввожу имя в текстовое поле имени файла вручную.Чтобы еще больше запутать, метод getSelectedFile() работает в трех разных ситуациях:

  1. Я заполняю его с помощью setSelectedFile() (пользователь щелкнул значение в таблице, а я использую setSelectedFile())
  2. Я щелкаю существующий файл в средстве просмотра файлов
  3. Я нажимаю клавишу ВВОД после заполнения текстового поля имени файла

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

Прослушиватели, которые вызывают getSelectedFile(), выглядят следующим образом:

  • Прослушиватель событий для keyReleased
  • Прослушиватель событий для mousePressed.
  • Прослушиватель PropertyChangeEvent на моем jFileChooser
  • Прослушиватель действий на моем jFileChooser

Есть ли лучший способ прослушивания моего jFileChooser для получения пользовательского ввода?Я чувствую, что упускаю что-то очень очевидное ... любая помощь приветствуется!

edit Немного больше информации ...

У меня есть JFileChooserкомпонент в JSplitPane, который находится в JFrame.Я не звоню showOpenDialog, чтобы получить ввод от пользователя.Компонент доступен как часть формы.

То, что я хотел бы сделать, это прослушать ввод пользователя, когда он печатает.У меня есть кнопка «Начать экспорт», которую я хотел бы оставить отключенной, пока пользователь не введет правильное имя файла в текстовое поле имени файла в компоненте JFileChooser.Для этого у меня есть слушатель KeyEvent, который я хотел бы использовать для получения имени файла, когда пользователь вводит его.

дальнейшее редактирование

Вот слушатель действияcode:

jFileChooserExport.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jFileChooserExportActionPerformed(evt);
        }
    });

У меня также есть прослушиватель изменения свойства здесь:

jFileChooserExport.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
        public void propertyChange(java.beans.PropertyChangeEvent evt) {
            jFileChooserExportPropertyChange(evt);
        }
    });

Внутри jFileChooserExportPropertyChange и jFileChooserExportActionPerformed Я пытаюсь получить файл, выбранный пользователем, путем вызова getSelectedFile ().В обоих случаях, однако, он остается нулевым, пока пользователь не выполнит один из трех методов, описанных выше

Ответы [ 2 ]

2 голосов
/ 09 февраля 2011

Прочитайте раздел из учебника по Swing на Как использовать средства выбора файлов . Там у меня отлично работает демо-код.

0 голосов
/ 09 февраля 2011

Поскольку ни один из приведенных ниже вариантов не работает, вы можете попробовать добавить PropertyChangeListener в свой JFileChooser, прослушивая SELECTED_FILE_CHANGED_PROPERTY


Может случиться так, что у вашего средства выбора файлов может быть включено множественное выделение , в этом случае getSelectedFile вернет ноль, но getSelectedFiles вернет массив, содержащий выбранные файлы. Вы можете либо отключить множественный выбор , либо использовать массив (если вы хотите, чтобы пользователь выбирал только один файл, установите для multiSelectionEnabled значение false).

Другая возможность, однако, заключается в том, что если вы пытаетесь получить выбранный файл, но fileChooser.showOpenDialog или fileChooser.showSaveDialog еще не были вызваны или не вернули JFileChooser.APPROVE_OPTION

Кроме того, я считаю, что JFileChooser чувствителен к регистру, поэтому, если имя файла «Foo.bar» и вы вводите «FoO.bar», он будет думать, что вам нужно что-то еще.

...