Jump to content
СофтФорум - всё о компьютерах и не только

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


Recommended Posts

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

Link to comment
Share on other sites

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

 

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

 

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

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

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

 

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

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

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

 

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

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

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

Edited by LifeOnNet
Link to comment
Share on other sites

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

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

 

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

Edited by Teddy_Bear
Link to comment
Share on other sites

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

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

 

 

 

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

 

 

 

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

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

 

 

 

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

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

 

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

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

Edited by LifeOnNet
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...