Назад
Вперед
7.1. Выбор файлов с помощью класса FileDialog
На примере автономного приложения Java мы
показали использование класса FileDialog для
создания стандартных диалоговых панелей выбора
файлов.
Исходный текст примера
Архив проекта для Java WorkShop 2.0
Немного теории
Во многих примерах этого раздела, посвященного
работе с файлами и каталогами в приложениях Java,
мы будем пользоваться классом FileDialog. Этот класс
позволяет автономным приложениям отображать на
экране стандартные диалоговые панели,
предназначенные для выбора файлов.
Чтобы создать такую панель, вам нужно
воспользоваться одним из трех конструкторов,
предусмотренных в классе FileDialog.
Первый из них позволяет покзать на экране
стандартную диалоговую панель, предназначенную
для загрузки файла:
FileDialog(Frame parentFrame);
Через единственный параметр конструктору
передается ссылка на объект, владеющий
диалоговой панелью.
Второй конструктор предназначен для решения
этой же задачи, но дополнительно позволяет
указать произвольный заголовок диалоговой
панели:
FileDialog(Frame parentFrame, String szTitle);
И, наконец, с помощью третьего конструктора
класса FileDialog вы можете отображать панель с
произвольным заголовком, пригодную либо для
загрузки, либо для сохранения файла:
FileDialog(Frame parentFrame, String szTitle,
int nMode);
Если параметр nMode имеет значение FileDialog.LOAD, будет
выбираться файл для загрузки, а если FileDialog.SAVE -
для сохранения.
После создания диалоговой панели ее необходимо
отобразить методом show.
После того как пользователь выберет файл,
приложение может получить путь к каталогу и имя
файла, воспользовавшись методами getDirectory и getFile,
определенными в классе FileDialog.
Описание примера
Данный пример представляет собой заготовку для
демонстрации возможностей работы с каталогами и
файлами. На его основе мы создадим большинство
примеров в этом разделе.
В окне консольного приложения имеется меню File
со строками Open, Save и Exit (рис. 1).
Рис. 1. Меню в главном окне приложения
Если из меню File выбрать строку Open, на экране
появится стандартная диалоговая панель для
выбора входного файла с заголовком Open file (рис. 2).
Рис. 2. Стандартная панель для выбора входного
файла
При выборе строки Save As на экране отображается
стандартная диалоговая панель для сохранения
файла с заголовком Save file as (рис. 3).
Рис. 3. Стандартная диалоговая панель для
сохранения файла
Если выбранный для сохранения файл уже
существует, пользователь получает
предупреждающее сообщение, показанное на рис. 4.
Рис. 4. Предупреждающее сообщение при
перезаписи файла
Наше приложение показывает в своем окне полные
пути к выбранным файлам (рис. 5).
Рис. 5. В окне приложения отображаются пути к
файлам
Рассмотрим исходный текст приложения.
Главный класс приложения ShowFileDialog
В главном классе нашего автономного приложения
определен статический метод main, получающий
управление сразу после запуска:
import java.awt.*;
import java.awt.event.*;
public class ShowFileDialog
{
public static void main(String args[])
{
FrameWindow frame;
frame =
new FrameWindow(
"File I/O Operations");
frame.setVisible(true);
}
}
Этот метод создает окно приложения как объект
класса FrameWindow, определенном в нашем приложении на
базе класса Frame. Затем метод main делает это окно
видимым при помощи метода setVisible.
Класс FrameWindow
Класс FrameWindow создан на базе класса Frame:
class FrameWindow extends Frame
implements ActionListener, WindowListener
{
. . .
}
Для работы с меню он реализует интерфейс
ActionListener, а для отработки функции закрытия
главного окна приложения - интерфейс WindowListener.
В классе FrameWindow мы определили несколько полей.
В поле ta хранится ссылка на многострочный
редактор текста, занимающий все окно приложения:
TextArea ta;
Следующие поля хранят ссылки на главное меню и
строки главного меню:
MenuBar mb;
Menu mFile;
MenuItem miOpen;
MenuItem miSave;
MenuItem miExit;
И, наконец, в поле fdlg хранится ссылка на
стандартную диалоговую панель выбора файла:
FileDialog fdlg;
Конструктор класса FrameWindow
После вызова конструктора родительского
класса Frame наш конструктор устанавливает размеры
окна приложения:
super(szTitle);
setSize(400, 300);
Далее он создает и формирует главное меню,
добавляя в него отдельные строки:
mb = new MenuBar();
mFile = new Menu("File");
miOpen = new MenuItem("Open...");
mFile.add(miOpen);
miSave = new MenuItem("Save As...");
mFile.add(miSave);
mFile.add("-");
miExit = new MenuItem("Exit");
mFile.add(miExit);
mb.add(mFile);
Для строк меню назначаются обработчики
событий:
miOpen.addActionListener(this);
miSave.addActionListener(this);
miExit.addActionListener(this);
Затем конструктор подключает меню к окну
приложения:
setMenuBar(mb);
Чтобы пользователь мог закрыть окно
приложения, мы подключаем обработчик события
интерфейса WindowListener:
this.addWindowListener(this);
Перед тем как вернуть управление, конструктор
создает многострочный редактор текста и
добавляет его в центр окна приложения с
использованием схемы размещения компонент
BorderLayout:
ta = new TextArea(10, 30);
setLayout(new BorderLayout());
add("Center", ta);
Метод actionPerformed класса FrameWindow
Когда пользователь выбирает ту или иную строку
меню, управление получает метод actionPerformed. Он
определяет, какая строка была выбрана, и
выполняет соответствующие действия.
При выборе из меню File строки Open метод actionPerformed
создает и отображает диалоговую панель с
названием Open file:
if(e.getSource().equals(miOpen))
{
fdlg = new FileDialog(this, "Open file",
FileDialog.LOAD);
fdlg.show();
ta.append("Open: " +
fdlg.getDirectory() +
fdlg.getFile() + "\n");
}
Параметр FileDialog.LOAD указывает, что файл
выбирается для загрузки.
Когда пользователь завершает процедуру выбора
файла, метод actionPerformed получает путь к файлу и имя
файла при помощи методов getDirectory и getFile,
соответственно. Далее он формирует строку
полного пути файла и добавляет ее в окно
многострочного редактора ta.
Выбор строки Save As приводит к отображению
диалоговой панели с названием Save file as:
else if(e.getSource().equals(miSave))
{
fdlg = new FileDialog(this,
"Save file as...",
FileDialog.SAVE);
fdlg.show();
ta.append("Save as: " +
fdlg.getDirectory() +
fdlg.getFile() + "\n");
}
Здесь мы предаем конструктору класса FileDialog
параметр FileDialog.SAVE, указывающий, что файл
выбирается для сохранения.
И, наконец, при выборе строки Exit главное окно
приложения скрывается:
else if(e.getSource().equals(miExit))
{
setVisible(false);
System.exit(0);
}
Метод windowClosing класса FrameWindow
При закрытии главного окна приложения получает
управление метод windowClosing:
public void windowClosing(WindowEvent e)
{
setVisible(false);
System.exit(0);
}
Этот метод определен как часть интерфейса
WindowListener. Он скрывает главное окно и затем
завершает работу приложения.
Другие методы класса FrameWindow
Еще несколько методов мы определили для
полноты реализации интерфейса WindowListener. В нашем
приложении на них не возлагается никаких
функций:
public void windowOpened(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
Назад Вперед |