Spec-Zone .ru
спецификации, руководства, описания, API
|
Селекторы файла обеспечивают GUI для того, чтобы он переместился по файловой системе, и затем или выбрал файл или каталог из списка, или ввел имя файла или каталога. Чтобы вывести на экран селектора файла, Вы обычно используете JFileChooser
API, чтобы показать модальное диалоговое окно, содержащее селектора файла. Другой способ представить селектора файла состоит в том, чтобы добавить экземпляр JFileChooser
к контейнеру.
Если Вы намереваетесь распределить свою программу, поскольку Сеть Java™ без знака Запускает приложение, то вместо того, чтобы использовать JFileChooser
API следует использовать файловые службы, обеспеченные API JNLP. Эти службы — FileOpenService
и FileSaveService
— не только оказывают поддержку для того, чтобы выбрать файлы в ограниченной среде, но также и заботятся о фактическом открытии и сохранении их. Пример использования этих служб находится в JWSFileChooserDemo. Документация для того, чтобы использовать API JNLP может быть найдена в
Нажмите кнопку Launch, чтобы работать, JWSFileChooserDemo, используя Сеть Java™ Запускаются (
Работая с JWSFileChooserDemo
пример, бояться терять файлы, в которых Вы нуждаетесь. Всякий раз, когда Вы нажимаете сохранить кнопку и выбираете существующий файл, этот демонстрационный пример переводит Файл в рабочее состояние, Существует диалоговое окно с запросом, чтобы заменить файл. Принятие запроса перезаписывает файл.
Остальная часть этого раздела обсуждает, как использовать JFileChooser
API. A JFileChooser
возразите только подаркам GUI для того, чтобы выбрать файлы. Ваша программа ответственна за выполнение чего-то с выбранным файлом, таким как открытие или сохранение этого. Обратитесь к
JFileChooser
API облегчает переводить в рабочее состояние открытый и сохранять диалоговые окна. Тип стили определяет то, на что похожи эти стандартные диалоговые окна и как они отличаются. В стили Java сохранить диалоговое окно выглядит одинаково как открытое диалоговое окно, за исключением title на окне диалогового окна и текста на кнопке, которая одобряет работу. Вот изображение открытого диалогового окна стандарта в стили Java:
Вот изображение вызванного приложения FileChooserDemo
это переводит в рабочее состояние открытое диалоговое окно и сохранить диалоговое окно.
FileChooserDemo.java
, измените режим выбора файла на режим только для каталогов. (Поиск DIRECTORIES_ONLY
и непрокомментируйте строку, которая содержит это.) Затем компилируют и выполняют пример снова. Вы только будете в состоянии видеть и выбрать каталоги, не обычные файлы.Перевод в рабочее состояние стандарта открывается, диалоговое окно требует только двух строк кода:
//Create a file chooser final JFileChooser fc = new JFileChooser(); ... //In response to a button click: int returnVal = fc.showOpenDialog(aComponent);
Параметр showOpenDialog
метод определяет родительский компонент для диалогового окна. Родительский компонент влияет на позицию диалогового окна и фрейма, от которого зависит диалоговое окно. Например, стиль Java помещает диалоговое окно непосредственно по родительскому компоненту. Если родительский компонент находится во фрейме, то диалоговое окно зависит от того фрейма. Это диалоговое окно исчезает, когда фрейм минимизируется и вновь появляется, когда фрейм максимизируется.
По умолчанию, селектор файла, которого не показали перед дисплеями все файлы в корневом каталоге пользователя. Можно определить начальный каталог селектора файла при использовании одного из JFileChooser
's другие конструкторы, или можно установить каталог с setCurrentDirectory
метод.
Звонок showOpenDialog
появляется в actionPerformed
метод слушателя действия кнопки Open a File:
public void actionPerformed(ActionEvent e) { //Handle open button action. if (e.getSource() == openButton) { int returnVal = fc.showOpenDialog(FileChooserDemo.this); if (returnVal == JFileChooser.APPROVE_OPTION) { File file = fc.getSelectedFile(); //This is where a real application would open the file. log.append("Opening: " + file.getName() + "." + newline); } else { log.append("Open command cancelled by user." + newline); } } ... }
showXxxDialog
методы возвращают целое число, которое указывает ли пользователь, выбранный файл. В зависимости от того, как Вы используете селектора файла, часто достаточно проверить, является ли возвращаемое значение APPROVE_OPTION
и затем не изменить любое другое значение. Чтобы получить выбранный файл (или каталог, если Вы устанавливаете селектора файла, чтобы позволить выборы каталога), вызовите getSelectedFile
метод на селекторе файла. Этот метод возвращает экземпляр File
.
Пример получает имя файла и использует это в сообщении журнала. Можно обратиться к другим методам File
объект, такой как getPath
, isDirectory
, или exists
получить информацию о файле. Можно также вызвать другие методы такой как delete
и rename
изменить файл в некотором роде. Конечно, Вы могли бы также хотеть открыть или сохранить файл при использовании одного из классов чтения или классов для записи, обеспеченных платформой Java. См.
Пример программы использует тот же самый экземпляр JFileChooser
class, чтобы вывести на экран стандарт сохраняет диалоговое окно. На сей раз вызовы программы showSaveDialog
:
int returnVal = fc.showSaveDialog(FileChooserDemo.this);
При использовании того же самого экземпляра селектора файла, чтобы вывести на экран ее открытое и сохранить диалоговые окна, программа пожинает следующие преимущества:
Наконец, у примера программы есть закомментированные строки кода, которые позволяют Вам изменять режим выбора файла. Например, следующая строка кода делает селектора файла способным выбрать только каталоги, и не файлы:
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
Другой возможный режим выбора FILES_AND_DIRECTORIES
. Значение по умолчанию FILES_ONLY
. Следующее изображение показывает открытое диалоговое окно с набором режима выбора файла к DIRECTORIES_ONLY
. Отметьте, что, в стили Java, по крайней мере, только каталоги видимы — не файлы.
Если Вы хотите создать селектора файла для задачи кроме открытия или сохранения, или если Вы хотите настроить селектора файла, продолжите читать. Мы обсудим следующие темы:
Давайте смотреть на FileChooserDemo2
пример, измененная версия предыдущей демонстрационной программы, которая использует больше JFileChooser
API. Этот пример использует селектора файла, который был настроен несколькими способами. Как исходный пример, пользователь вызывает селектора файла с нажатием кнопки. Вот изображение селектора файла:
Поскольку данные показывают, этот селектор файла был настроен для специальной задачи (Присоединяют), обеспечивает пользовательский-choosable фильтр файла (Только Изображения), использует специальное представление файла для файлов изображений, и имеет вспомогательное компонент, который выводит на экран набросок в настоящий момент выбранного файла изображения.
Остаток от этого раздела показывает Вам код, который создает и настраивает этого селектора файла. См., что пример индексирует для ссылок ко всем файлам, требуемым этим примером.
Поскольку Вы видели, JFileChooser
class обеспечивает showOpenDialog
метод для того, чтобы вывести на экран открытое диалоговое окно и showSaveDialog
метод для того, чтобы вывести на экран сохранить диалоговое окно.
У class есть другой метод, showDialog
, для того, чтобы вывести на экран селектора файла для пользовательской задачи в диалоговом окне. В стили Java единственной разницей между этим диалоговым окном и другими диалоговыми окнами селектора файла является title на диалоговом окне и метка на одобрить кнопке. Вот код от FileChooserDemo2
это переводит диалоговое окно селектора файла в рабочее состояние для Присоединить задачи:
JFileChooser fc = new JFileChooser(); int returnVal = fc.showDialog(FileChooserDemo2.this, "Attach");
Первый параметр showDialog
метод является родительским компонентом для диалогового окна. Вторым параметром является a String
объект, который обеспечивает и title для диалогового окна и метку для одобрить кнопки.
Еще раз селектор файла ничего не делает с выбранным файлом. Программа ответственна за реализацию пользовательской задачи, для которой создавался селектор файла.
По умолчанию селектор файла выводит на экран все файлы и каталоги, которые это обнаруживает, за исключением скрытых файлов. Программа может применить один или более фильтров файла к селектору файла так, чтобы селектор показал только некоторые файлы. Селектор файла вызывает фильтр accept
метод для каждого файла, чтобы определить, должно ли это быть выведено на экран. Фильтр файла принимает или отклоняет файл, основанный на критериях, таких как тип файла, размер, владение, и так далее. Фильтры влияют на список файлов, выведенных на экран селектором файла. Пользователь может ввести имя любого файла, даже если это не выводится на экран.
JFileChooser
поддерживает три различных видов фильтрации. Фильтры проверяются в порядке, перечисленном здесь. Например, управляемый приложением фильтр видит только те файлы, принятые встроенной фильтрацией.
setFileHidingEnabled(false)
показать скрытые файлы.FileFilter
, инстанцируйте этого, и используйте экземпляр в качестве параметра setFileFilter
метод. Установленный фильтр выводится на экран в списке пользовательских-choosable фильтров. Селектор файла показывает только те файлы, что фильтр принимает.FileChooserDemo2
добавляет пользовательский фильтр файла к списку пользовательских-choosable фильтров: fc.addChoosableFileFilter(new ImageFilter());
fc.setAcceptAllFileFilterUsed(false);
ImageFilter.java
и подкласс FileFilter
. ImageFilter
class реализует getDescription
метод, чтобы возвратить "Только Изображения" — строка, чтобы вставить список пользовательских-choosable фильтров. ImageFilter
также реализации accept
метод так, чтобы это приняло все каталоги и любой файл, у которого есть a .png
, .jpg
, .jpeg
, .gif
, .tif
, или .tiff
расширение файла. public boolean accept(File f) { if (f.isDirectory()) { return true; } String extension = Utils.getExtension(f); if (extension != null) { if (extension.equals(Utils.tiff) || extension.equals(Utils.tif) || extension.equals(Utils.gif) || extension.equals(Utils.jpeg) || extension.equals(Utils.jpg) || extension.equals(Utils.png)) { return true; } else { return false; } } return false; }
Предыдущий пример кода использует getExtension
метод и несколько строковых констант от Utils.java
, показанный здесь:
public class Utils { public final static String jpeg = "jpeg"; public final static String jpg = "jpg"; public final static String gif = "gif"; public final static String tiff = "tiff"; public final static String tif = "tif"; public final static String png = "png"; /* * Get the extension of a file. */ public static String getExtension(File f) { String ext = null; String s = f.getName(); int i = s.lastIndexOf('.'); if (i > 0 && i < s.length() - 1) { ext = s.substring(i+1).toLowerCase(); } return ext; } }
В стили Java список селектора показывает имя каждого файла и выводит на экран маленький значок, который представляет, является ли файл истинным файлом или каталогом. Можно настроить это представление файла, создавая пользовательский подкласс FileView
и использование экземпляра class как параметр setFileView
метод. Пример использует экземпляр пользовательского class, реализованного в ImageFileView.java
, как представление файла селектора файла.
fc.setFileView(new ImageFileView());
ImageFileView
class показывает различный значок для каждого типа изображения, принятого фильтром изображения, описанным ранее.
ImageFileView
class переопределяет пять абстрактных методов, определенных в FileView
следующим образом.
String getTypeDescription(File f)
ImageFileView
's реализация этого метода: public String getTypeDescription(File f) { String extension = Utils.getExtension(f); String type = null; if (extension != null) { if (extension.equals(Utils.jpeg) || extension.equals(Utils.jpg)) { type = "JPEG Image"; } else if (extension.equals(Utils.gif)){ type = "GIF Image"; } else if (extension.equals(Utils.tiff) || extension.equals(Utils.tif)) { type = "TIFF Image"; } else if (extension.equals(Utils.png)){ type = "PNG Image"; } } return type; }
Icon getIcon(File f)
ImageFileView
's реализация этого метода: public Icon getIcon(File f) { String extension = Utils.getExtension(f); Icon icon = null; if (extension != null) { if (extension.equals(Utils.jpeg) || extension.equals(Utils.jpg)) { icon = jpgIcon; } else if (extension.equals(Utils.gif)) { icon = gifIcon; } else if (extension.equals(Utils.tiff) || extension.equals(Utils.tif)) { icon = tiffIcon; } else if (extension.equals(Utils.png)) { icon = pngIcon; } } return icon; }
String getName(File f)
null
указать, что стиль должен понять это. Другая общая реализация возвраты f.getName()
.String getDescription(File f)
null
указать, что стиль должен понять это.Boolean isTraversable(File f)
null
указать, что стиль должен понять это. Некоторые приложения могли бы хотеть препятствовать тому, чтобы пользователи убывали в определенный тип каталога, потому что он представляет составной документ. isTraversable
метод никогда не должен возвращаться true
для некаталога.Специализированный селектор файла в FileChooserDemo2
имеет вспомогательное компонент. Если в настоящий момент выбранный пункт является PNG, JPEG, РАЗМОЛВКОЙ, или изображением ДЖИФА, вспомогательное, компонент выводит на экран набросок изображения. Иначе, вспомогательное компонент пусто. Кроме предварительного средства просмотра, вероятно наиболее популярный способ использования вспомогательного компонент является панелью с большим количеством средств управления на этом, таких как флажки тот переключатель между функциями.
Пример вызывает setAccessory
метод, чтобы установить экземпляр ImagePreview
class, реализованный в ImagePreview.java
, как селектор, вспомогательный компонент:
fc.setAccessory(new ImagePreview(fc));
Любой объект, который наследовался от JComponent
class может быть вспомогательным компонент. У компонента должен быть привилегированный размер, который выглядит хорошим в селекторе файла.
Селектор файла запускает событие изменения свойства, когда пользователь выбирает элемент в списке. Программа со вспомогательным, которое компонент должен зарегистрировать, чтобы получить эти события, чтобы обновить вспомогательное компонент всякий раз, когда выбор изменяется. В примере, ImagePreview
сам объект регистрируется для этих событий. Это сохраняет весь код связанным со вспомогательным компонент вместе в одном class.
Вот реализация примера propertyChange
метод, который является методом, вызванным, когда событие изменения свойства запускается:
//where member variables are declared File file = null; ... public void propertyChange(PropertyChangeEvent e) { boolean update = false; String prop = e.getPropertyName(); //If the directory changed, don't show an image. if (JFileChooser.DIRECTORY_CHANGED_PROPERTY.equals(prop)) { file = null; update = true; //If a file became selected, find out which one. } else if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(prop)) { file = (File) e.getNewValue(); update = true; } //Update the preview accordingly. if (update) { thumbnail = null; if (isShowing()) { loadImage(); repaint(); } } }
Если SELECTED_FILE_CHANGED_PROPERTY
свойство, которое изменилось, этот метод получает a File
объект от селектора файла. loadImage
и repaint
методы используют File
возразите, чтобы загрузить изображение и перекрасить вспомогательное компонент.
API для того, чтобы использовать селекторов файла попадает в эти категории:
Метод или Конструктор | Цель |
---|---|
JFileChooser () |
Создает экземпляр селектора файла. File и String параметры, когда существующий, обеспечивают начальный каталог. |
|
Показывает модальное диалоговое окно, содержащее селектора файла. Эти методы возврат APPROVE_OPTION если пользователь, одобренный работа и CANCEL_OPTION если пользователь отменял это. Другое возможное возвращаемое значение ERROR_OPTION , что означает, что непредвиденная ошибка произошла. |
Метод | Цель |
---|---|
|
Наборы или получают в настоящий момент выбранный файл или (если выбор каталога был включен), каталог. |
|
Наборы или получают в настоящий момент выбранные файлы, если селектор файла устанавливается позволить множественный выбор. |
|
Наборы или получают режим выбора файла. Приемлемые значения FILES_ONLY (значение по умолчанию), DIRECTORIES_ONLY , и FILES_AND_DIRECTORIES .Интерпретирует или каталоги, или файлы являются выбираемыми согласно текущему режиму выбора. |
|
Наборы или интерпретируют, могут ли многократные файлы быть выбраны сразу. По умолчанию пользователь может выбрать только один файл. |
|
Наборы или получают ли AcceptAll фильтр файла используется в качестве допустимого выбора в списке фильтра choosable; значение по умолчанию true . |
|
Учитывая родительский компонент, создает и возвращает новое диалоговое окно, которое содержит этого селектора файла, зависит от фрейма родителя, и центрируется по родителю. |
Метод | Цель |
---|---|
|
Прокручивает список селектора файла так, что, обозначенный файл видим. |
|
Наборы или получают каталог, файлы которого выводятся на экран в списке селектора файла. |
|
Изменяет список, чтобы вывести на экран родителя текущего каталога. |
|
Проверяет файловую систему и обновляет список селектора. |
|
Наборы или получают свойство, которое определяет, перетаскивают ли автоматический обработку, включается. См. |
Эта таблица показывает примеры, что селекторы файла использования и точки туда, где те примеры описываются.
Пример | Где Описано | Примечания |
---|---|---|
FileChooserDemo |
Этот раздел | Выводит на экран открытое диалоговое окно и сохранить диалоговое окно. |
FileChooserDemo2 |
Этот раздел | Использует селектора файла с пользовательской фильтрацией, пользовательским представлением файла, и вспомогательным компонент. |
JWSFileChooserDemo |
Этот раздел | Использует API JNLP, чтобы открыть и сохранить файлы. |