Как да използваме прозорец за
избор на файлове в Swing
Пълният код на примера: FileChooserDemo
Прозорецът за изпор на файлове се осигурява интерфейс за
управление на файловата система с възможност за директен избор на
файл или директория от списък или въвеждане на име. За визуализиране
на прозореца обикновено се използва JFileChooser,
за да се покаже модален диалогов прозорец, съдържащ възможностите за
избор. Другия на начин за представяне е добавянето на инстанция на
JFileChooser към контейнер.
|
|
Забележка: Ако възнамерявате да осъществите своята
програма като неподписано JavaTM Web Start приложение, тогава по
същество използвайки JFileChooser API, вие ще се лишите от файл услугите
осигурени от JNLP API. Тези услуги - FileOpenService и
FileSaveService - осигуряват не само подръжка на избора на файлове
в съответната среда, но също така ще държат под внимание
отварянето и записването им. Документацията за използването на
JNLP API е в урока за Java
Web Start
|
|
Тази секция дискутира използването на JFileChooser.
Обектът от клаза JFileChooser представя единствено потребителски
интерфейс за избиране на файлове. Вашата програма трябва да включва
възможностите да прави нещо с тези файлове - например да ги отваря
или записва. Обърнете се към Основи
на Вход/Изход за повече информация за това как се четат и
записват файлове.
API-то на JFileChooser предлага лесна
възмижност за извикването на "отвори" или "запиши"
диалог. Обикновено в Джава тези два диалога изглеждат по един и същи
начин, ако изключим името в рамката на прозореца и надписите в
бутоните.

А това е снимка приложението, което си извиква като диалог за
отваряне или записване:

Извикването на стантартен отвори-диалогов прозорец изисва само
два реда код.
//Create a file chooser
final JFileChooser fc = new JFileChooser();
...
//In response to a button click:
int returnVal = fc.showOpenDialog(aComponent);
Аргументът на метода showOpenDialog e
родителския компонент за диалога. Родителския компонент определя
позицията на диалога и рамката от която диялога зависи. Например
Джава позиционира диалога директно над родителския компонент. Ако
родителският компонент е прозорец, тогава диалогът зависи от този
прозорец и ще изчезне ако той бъде минимилизиран и ще се появи в
обратния случай.
По подразбиране прозорецът за избор няма да
бъде показан преди да обозре всички файлове в потребителската
директория. Можете да специфицирате тази директория използвайки някой
от другите конструктори на JFileChooser или да зададете директорията
с метода 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
на JFileChooser. Методът връща инстанция на File.
Примерът
взима името на файла и го използва като съобщение. Възможно е да се
извикват други методи на File като getPath, isDirectory или exists,
за да се получи информация за файла или delete и rename, за да бъде
промен по някакъв начин. Възможно е също да иската да отворите или
запишете файл използвайки класовете за четене и писане на файлове
осигурени от Джава платформата.
Примерната програма използва
същата инстанция на JFileChooser, за да покаже стандартен диалог за
запис. Този път е извикан showSaveDialog;
int returnVal = fc.showSaveDialog(FileChooserDemo.this);
Предимствана на използването на същата инстанция за извикването на
двата типа диалогови прозорци са:
Накрая, примерната програма има опция, която ви позволява сменяте
типа на избирания файл. Например следващия ред код прави така, че
изборът да се ограничи единствено до директории, не до файлове.
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
Друга възможна селекция е FILES_AND_DIRECTORIES. Подразбиращата се е
FILES_ONLY. Следващата снимка показва отвори диалог с обсег на
селекцията DIRECTORIES_ONLY.

Ако искате да създадете прозорец за
избор на файлове с възможности различни от отвори и запиши или ако
искате на промените текущия - продължававайте да четете.
|