LifeOnNet Опубликовано 31 мая, 2014 Жалоба Поделиться Опубликовано 31 мая, 2014 Использую JFileChooser как компонент в форме. Для получения выделенного файла использую функцию getSelectedFile(), а вот как проверить какая кнопка была нажата при отсутствии статической функции openDialog() возвращающей значение? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Teddy_Bear Опубликовано 1 июня, 2014 Жалоба Поделиться Опубликовано 1 июня, 2014 (изменено) Если JFileChooser.APPROVE_OPTION равно True - открыть, False - отказ. Но что-то просто. Я не понял в чём проблема? Изменено 1 июня, 2014 пользователем Teddy_Bear Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
LifeOnNet Опубликовано 1 июня, 2014 Автор Жалоба Поделиться Опубликовано 1 июня, 2014 (изменено) Задача решена, и потому хочу написать эту "эпопею" в помощь другим пользователям. Сразу оговорюсь: я приверженец Netbeans, и это оставляет отпечаток на применяемых мной концептах. :) И так: стандартный вариант использования JFileChooser: создаем объект, вызываем showDialog или showOpenDialog или showSaveDialog. Функция создает окно JDialog, рекурсивно вписывает туда созданный JFileChooser, ждет нажатия и выбора, и ВОЗВРАЩАЕТ ЧТО НАЖАТО. Отлично. Сравниваем с константой JFileChooser.APPROVE_OPTION (кстати как может быть константа true??? или я чего-то не понимаю :) ) и если нажато оно достаем выбранный файл getSelectedFile. Мой путь , делаем все вручную: создаем JDialog, создаем JFileChooser, добавляем в диалог как простой компонент: кнопку например :) , благо в Netbeans это делается из рисовалки, и... Стоп! Нет функции возвращающей значение! Есть getSelectedFile который говорит что выделено и все. А она может иметь значение предидущего файла если диалог многоразовый, и ничего не говорит а нажатии. Плюс JFileChooser структурированный элемент, то есть кнопку в нем отдельно прослушать нельзя. Вот об этом я и говорил! :) А решение подсказали несколько опытов: При нажатии JFileChooser (о счастье :) ) вызывает ActionPerformed, при чем только при клике на кнопках, двойном щелчке на файле или закрытии диалога. А передаваемое событие имеет функцию getActionCommand(), которая для JFileChooser возвращает ApproveSelection или CancelSelection . Думаю дальше понятно без слов :) Изменено 1 июня, 2014 пользователем LifeOnNet Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Teddy_Bear Опубликовано 1 июня, 2014 Жалоба Поделиться Опубликовано 1 июня, 2014 (изменено) "Без слов понятно" :) что True равно значение выражение сравнения возвращаемого значения и константы. А вот значение ApproveSelection не может быть с прошлого раза, "если диалог многоразовый"? Завидую роскоши буйного изобретательства ручками, когда и так есть всё в стандартных диалогах - это от избытка энергии. :) Изменено 1 июня, 2014 пользователем Teddy_Bear Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
LifeOnNet Опубликовано 1 июня, 2014 Автор Жалоба Поделиться Опубликовано 1 июня, 2014 (изменено) А вот значение ApproveSelection не может быть с прошлого раза, "если диалог многоразовый"? Нет :), потому как событие генерируется каждый раз новое, объект создается новый, и команду содержит всегда свежую. Завидую роскоши буйного изобретательства ручками, когда и так есть всё в стандартных диалогах Сразу оговорюсь: я приверженец Netbeans, и это оставляет отпечаток на применяемых мной концептах. Когда пользуешься рисовалкой, достаточно просто создать диалог, "кинуть" туда элемент управления, и быстро дописать прослушивающий процесс с выполняемой функцией. это от избытка энергии. Не совсем. Просто как вы помните ценой портабельности JFileChooser по сравнению с FileDialog стало удаление "непортабельных" элементов, как контекстное меню платформы. То есть фактически FileDialog просто использовал API системы для показа диалога, в то время как JFileChooser является рисуемым с нуля объектом, который использованием Look & Feel становится похож на диалог системы. Плюс бывает необходимость в диалога иметь не только File Chooser, но и панель смены кодировки файла, предпросмотр и т.п. Но стандартным диалогом этого не добьешься. В этом плане FileDialog не позволял расширения, но хотя бы использовал API платформы, соблюдая "каноны" системы. JFileChooser же реально удобнее использовать как недо-элемент управления с возможностью доработки в диалоге. Изменено 1 июня, 2014 пользователем LifeOnNet Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.