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

Получение нажатия кнопки из 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
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

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

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