Класс FileDialog java.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Dialog java.awt.FileDialog Класс Window Из опыта работы с оконными графическими интерфейсами современных операционных систем мы привыкли к тому, что каждое приложение обладает одним или несколькими окнами. Класс Window служит базовым классом для всех окон, порождаемых из Java. Разумеется, он также является интерфейсом к соответствующему окну операционной системы, которая обслуживает окна всех приложений. Как правило, используется один из двух наследников Window – классы Frame и Dialog, которые будут рассмотрены следующими. Однако экземпляры Window не обладают ни рамкой, ни кнопками закрытия или минимизации окна, а потому зачастую используются как заставки (так называемые splash screen). Конструктор Window требует в качестве аргумента ссылку на Window или Frame. Другими словами, базовые окна не являются самостоятельными, они привязываются к другим окнам. Класс Frame Класс Frame предназначен для создания полнофункциональных окон приложений – с полосой заголовка, рамкой, кнопками закрытия, минимизации и максимизации окна. Поскольку Frame, как правило, является главным окном приложения, он создается невидимым, чтобы можно было настроить все его параметры, добавить все вложенные контейнеры и компоненты и лишь затем отобразить его в подготовленном виде. Конструктор принимает текстовый параметр – заголовок фрейма. Класс Dialog Если класс Frame предназначен для создания основного окна приложения, то экземпляры класса Dialog позволяют открывать дополнительные окна для взаимодействия с пользователем. Это может потребоваться, например, для вывода критического сообщения, для ввода параметров и т.д.. Окно диалога обладает стандартным оформлением – полоса заголовка, рамка. В правой части полосы заголовка присутствует лишь одна кнопка – закрытия окна. Поскольку Dialog является несамостоятельным окном, в конструктор необходимо передать ссылку на родительский фрейм или окно другого диалога. Также можно задать заголовок окна. Как и Frame, диалоговое окно создается изначально невидимым. Важным свойством диалогового окна является модальность. Если диалог модальный, то при его появлении на экране блокируются все пользовательские события, приходящие в родительское окно такого диалога. Класс FileDialog Класс FileDialog является модальным диалогом (наследником Dialog) и позволяет легко организовать работу с файлами. Этот класс предназначен и для открытия файла (open file), и для сохранения (save file). Окно диалога имеет внешний вид, принятый для текущей операционной системы. Класс FileDialog Конструктор принимает в качестве параметров ссылку на родительский фрейм, заголовок окна и режим работы. Для задания режима в классе определены две константы – LOAD и SAVE. FileDialog fd = new FileDialog(f, "Save file", FileDialog.SAVE); f – родительское окно «Save file» - имя фрейма. FileDialog.SAVE(LOAD) – отвечает за назначение FileDialog. Класс FileDialog • После создания диалога FileDialog его необходимо сделать видимым. • Затем пользователь делает свой выбор. • После закрытия диалога результат можно узнать с помощью методов getDirectory (для получения полного имени каталога) и getFile (для получения имени файла). Если пользователь нажал кнопку "Отмена" ("Cancel"), то будут возвращены значения null. Button save = new Button("save"); save.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae) { // Создаём и показываем диалог FileDialog fd = new FileDialog(f, "Save file", FileDialog.SAVE); fd.setFile("*.txt"); fd.setVisible(true); // Ждём, пока пользователь выберет файл // После того, как будет выбран файл, продолжаем обрабатывать нажатие кнопки String fileName = fd.getDirectory()+fd.getFile(); // Путь и имя выбранного файла String data = "Some data to be written."; //Это запишем в файл try{ FileWriter fw = new FileWriter(fileName, true); BufferedWriter bw = new BufferedWriter(fw); System.out.println("Write some data to file: " + fileName); for (int i=2;--i>=0;) { bw.write(data); bw.newLine(); } bw.close(); fw.close(); } catch(Exception e) {e.printStackTrace();} } }); fd.setFile("*.txt"); - устанавливает определенный файл. Другие типы файлов (png, exe) отображаться не будут. new FileWriter(fileName, true); - открывает файл на запись. Если второй параметр true, то данные будут дописываться в файл, если false – файл будет перезаписан. new BufferedWriter(fw); - класс, отвечающий за запись текста в файл. Принимает FileWriter. bw.write(data); - метод, который записывает текст в файл. bw.newLine(); - метод, создающий в файле переход на новую строку. bw.close(); fw.close(); - закрывают пишущие потоки для успешного сохранения файла. new FileReader(fileName); - открывает файл на чтение. new BufferedReader(fr); - класс, отвечающий за чтение текста из файла. Принимает FileReader. int br.read(); - метод, который читает один символ из файла. Возвращает считываемый символ. Если достигнут конец файла, вернёт число -1. String br.readLine(); - метод, читающий строку. Если достигнут конец файла, вернёт null. s1.contentEquals(s2); - сравнивает значение двух строк. s1 : value = “1234567890” offset = 0 length = 10 s2=s1.substring(5,10) : value = “1234567890” offset = 5 length = 5 !=“67890” Обе переменные ссылаются на одно и то же строковое значение, но с разными смещениями. При обычном сравнении, используя оператор == мы получим false. Но метод s2.contentEquals(“67890”) вернёт true.