Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Получение нажатия кнопки из JFileChooser при прямом использовании


Рекомендуемые сообщения

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

Ссылка на комментарий
Поделиться на другие сайты

Если JFileChooser.APPROVE_OPTION равно True - открыть, False - отказ. Но что-то просто. Я не понял в чём проблема?

Изменено пользователем Teddy_Bear
Ссылка на комментарий
Поделиться на другие сайты

Задача решена, и потому хочу написать эту "эпопею" в помощь другим пользователям.

 

Сразу оговорюсь: я приверженец Netbeans, и это оставляет отпечаток на применяемых мной концептах. :)

 

И так: стандартный вариант использования JFileChooser: создаем объект, вызываем showDialog или showOpenDialog или showSaveDialog.

Функция создает окно JDialog, рекурсивно вписывает туда созданный JFileChooser, ждет нажатия и выбора, и ВОЗВРАЩАЕТ ЧТО НАЖАТО.

Отлично. Сравниваем с константой JFileChooser.APPROVE_OPTION (кстати как может быть константа true??? или я чего-то не понимаю :) ) и если нажато оно достаем выбранный файл getSelectedFile.

 

Мой путь , делаем все вручную:

создаем JDialog, создаем JFileChooser, добавляем в диалог как простой компонент: кнопку например :) , благо в Netbeans это делается из рисовалки, и... Стоп! Нет функции возвращающей значение! Есть getSelectedFile который говорит что выделено и все. А она может иметь значение предидущего файла если диалог многоразовый, и ничего не говорит а нажатии. Плюс JFileChooser структурированный элемент, то есть кнопку в нем отдельно прослушать нельзя.

Вот об этом я и говорил! :)

 

А решение подсказали несколько опытов:

При нажатии JFileChooser (о счастье :) ) вызывает ActionPerformed, при чем только при клике на кнопках, двойном щелчке на файле или закрытии диалога.

​А передаваемое событие имеет функцию getActionCommand(), которая для JFileChooser возвращает ApproveSelection или CancelSelection . Думаю дальше понятно без слов :)

Изменено пользователем LifeOnNet
Ссылка на комментарий
Поделиться на другие сайты

"Без слов понятно" :) что True равно значение выражение сравнения возвращаемого значения и константы.

А вот значение ApproveSelection не может быть с прошлого раза, "если диалог многоразовый"?

 

Завидую роскоши буйного изобретательства ручками, когда и так есть всё в стандартных диалогах - это от избытка энергии. :)

Изменено пользователем Teddy_Bear
Ссылка на комментарий
Поделиться на другие сайты

А вот значение ApproveSelection не может быть с прошлого раза, "если диалог многоразовый"?

Нет :), потому как событие генерируется каждый раз новое, объект создается новый, и команду содержит всегда свежую.

 

 

 

Завидую роскоши буйного изобретательства ручками, когда и так есть всё в стандартных диалогах

 

 

 

Сразу оговорюсь: я приверженец Netbeans, и это оставляет отпечаток на применяемых мной концептах.

Когда пользуешься рисовалкой, достаточно просто создать диалог, "кинуть" туда элемент управления, и быстро дописать прослушивающий процесс с выполняемой функцией.

 

 

 

это от избытка энергии.

Не совсем. Просто как вы помните ценой портабельности JFileChooser по сравнению с FileDialog стало удаление "непортабельных" элементов, как контекстное меню платформы. То есть фактически FileDialog просто использовал API системы для показа диалога, в то время как JFileChooser является рисуемым с нуля объектом, который использованием Look & Feel становится похож на диалог системы. Плюс бывает необходимость в диалога иметь не только File Chooser, но и панель смены кодировки файла, предпросмотр и т.п. Но стандартным диалогом этого не добьешься.

 

В этом плане FileDialog не позволял расширения, но хотя бы использовал API платформы, соблюдая "каноны" системы.

JFileChooser же реально удобнее использовать как недо-элемент управления с возможностью доработки в диалоге.

Изменено пользователем LifeOnNet
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...