Принципы построения графического интерфейса
Класс TooSimpleFrame обладает всеми свойствами класса Frame, являясь его расширением. В нем создается экземпляр окна fr, и устанавливаются размеры окна на экране– 400x150 пикселов – методом setsize(). Если не задать размер окна, то на экране появится окно минимального размера – только строка заголовка. Конечно, потом его можно растянуть с помощью мыши до любого размера.
Затем окно выводится на экран методом setvisibie(true). Дело в том, что, с точки зрения библиотеки AWT, создать окно значит выделить область оперативной памяти, заполненную нужными пикселами, а вывести содержимое этой области на экран – уже другая задача, которую и решает метод setVisible(true).
Конечно, такое окно непригодно для работы. Не говоря уже о том, что у него нет заголовка и поэтому окно нельзя закрыть. Хотя его можно перемещать по экрану, менять размеры, сворачивать на панель задач и раскрывать, но команду завершения приложения мы не запрограммировали. Окно нельзя закрыть ни щелчком кнопки мыши на кнопке с крестиком в правом верхнем углу окна, ни комбинацией клавиш ALT + F4. Приходится завершать работу приложения средствами операционной системы, например, комбинацией клавиш CTRL + C.
В листинге 8.2 к программе листинга 8.1 добавлены заголовок окна и обращение к методу, позволяющему завершить приложение.
Листинг 8.2. Простое окно приложения.
import java.awt.*; import j ava.awt.event.*; class SimpleFrame extends Frame{ SimpleFrame(String s){ super (s); setSize(400, 150); setvisible(true); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent ev){ System.exit (0); } }); } public static void main(String[] args){ new SimpleFrame(" Моя программа"); } }
В программу добавлен конструктор класса SimpleFrame, обращающийся к конструктору своего суперкласса Frame, который записывает свой аргумент s в строку заголовка окна.
В конструктор перенесена установка размеров окна, вывод его на экран и добавлено обращение к методу addWindowListener (), реагирующему на действия с окном. В качестве аргумента этому методу передается экземпляр безымянного внутреннего класса, расширяющего класс WindowAdapter. Этот безымянный класс реализует метод windowclosing (), обрабатывающий попытку закрытия окна. Данная реализация очень проста – приложение завершается статическим методом exit () класса system. Окно при этом закрывается автоматически.
Все это мы подробно разберем в главе 12, а пока просто добавляйте эти строчки во все ваши программы для закрытия окна и завершения работы приложения.
Итак, окно готово. Но оно пока пусто. Выведем в него, по традиции, приветствие "Hello, World!", правда, слегка измененное.