Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Выбор файлов
Простейший редактор текста
Копирование файлов UNICODE
Сохранение объекта Java в файле
Произвольные классы и файлы
Буферизация потоков
Разбор конфигура-
ционного файла

Работа с консолью
Работа с классом PrintWriter
Разбор строк класса String
Загрузка и просмотр изображений
Потоки в оперативной памяти
Конвейерные потоки
Комбинирование двух потоков
Комбинирование нескольких потоков
Поиск слова в текстовом файле
Произвольный доступ к файлу
Информация о файле
Работа с каталогами
Просмотр содержимого каталога
Просмотр каталога с фильтром
Панель для выбора каталога
Список системных свойств
Сохранение списка системных свойств
Контрольная сумма файла
Копирование, переименование, удаление файлов
Архивы ZIP
Создание архива ZIP
Распаковка архива ZIP
Обход дерева каталогов

Назад Вперед

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).

pic1.gif (3247 bytes)

Рис. 1. Меню в главном окне приложения

Если из меню File выбрать строку Open, на экране появится стандартная диалоговая панель для выбора входного файла с заголовком Open file (рис. 2).

pic2.gif (8742 bytes)

Рис. 2. Стандартная панель для выбора входного файла

При выборе строки Save As на экране отображается стандартная диалоговая панель для сохранения файла с заголовком Save file as (рис. 3).

pic3.gif (8805 bytes)

Рис. 3. Стандартная диалоговая панель для сохранения файла

Если выбранный для сохранения файл уже существует, пользователь получает предупреждающее сообщение, показанное на рис. 4.

pic4.gif (2609 bytes)

Рис. 4. Предупреждающее сообщение при перезаписи файла

Наше приложение показывает в своем окне полные пути к выбранным файлам (рис. 5).

pic5.gif (3326 bytes)

Рис. 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) {}

Назад Вперед

[Назад]