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 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти