На рис. 8.2 показана иерархия основных классов AWT. Основу ее составляют готовые компоненты: Button, Canvas, Checkbox, Choice, Container, Label, List, Scrollbar, TextArea, TextField, MenuBar, Menu, PopupMenu, MenuItem, CheckboxMenuItem. Если этого набора не хватает, то от класса Canvas можно породить собственные "тяжелые" компоненты, а от класса Component — "легкие" компоненты.
Object
-Component — -Color -Cursor -Font -FontMetrics - Image -Polygon -BorderLayout -Card Layout -FlowLayout -GridBagLayout -GridLayout
-Button —Canvas -Checkbox — Choice —Container —r- JComponent
Label — List Scrollbar —T extComponent
t TextArea TextField
Panel-Applet
— ScrollPane
- JApplet
Window -p Dialog —p FileDialog kjWindow L JDialog L Frame — JFrame
GridBagConstaints
-Graphics -Graphics2D
Point2D-Point
—RectangularShape — Rectangle2D — Rectangle CheckboxGroup -MenuShortcut
MenuComponent-p MenuItem —Menu-PopupMenu
-Event L MenuBar I— CheckboxMenuItem
-EventObject —AWTEvent MediaTracker
Рис. 8.2. Иерархия основных классов AWT
Основные контейнеры — это классы Panel, ScrollPane, Window, Frame, Dialog, FileDialog. Свои "тяжелые" контейнеры можно породить от класса Panel, а "легкие" — от класса
Container.
Целый набор классов помогает размещать компоненты, задавать цвет, шрифт, рисунки и изображения, реагировать на сигналы от мыши и клавиатуры.
На рис. 8.2 показаны и начальные классы иерархии библиотеки Swing — классы
JComponent, JWindow, JFrame, JDialog, JApplet.
Окно библиотеки Swing
Для получения окна с помощью средств библиотеки Swing необходимо импортировать в свою программу пакет javax.swing и расширить класс JFrame, как показано в листинге 8.4. Вместо длинного метода закрытия окна можно обратиться к методу
setDefaultCloseOperation(JFrame.EXIT ON CLOSE);
указав в нем константу EXIT_ON_CLOSE класса JFrame, предписывающую завершить работу приложения при закрытии окна. Другие константы, определенные в интерфейсе
WindowConstants, предписывают:
□ dispose_on_close — закрыть окно и освободить память, занимаемую им, но не завершать приложение;
□ do_nothing_on_close — игнорировать команду закрытия окна;
□ hide_on_close — только убрать окно с экрана. Это значение по умолчанию.
Фон окна Swing серый, поэтому в конструктор добавлен еще метод setBackground(Color.WHITE), устанавливающий белый цвет фона.
import java.awt.*;
import javax.swing.*;
class SimpleFrame extends JFrame{
SimpleFrame(String s){ super(s);
setBackground(Color.WHITE); setSize(400, 150); setVisible(true);
setDefaultCloseOperation(EXIT ON CLOSE);
}
public void paint(Graphics g){
g.setFont(new Font("Serif", Font.ITALIC|Font.BOLD, 30)); g.drawString("Hello, XXI Century World!", 20, 100);
}
public static void main(String[] args){ new SimpleFrame(" Моя программа");
}
Метод paint () принадлежит классу Component, он выглядит точно так же, как в листинге 8.3. Его можно без всяких изменений перенести в программу, использующую библиотеку Swing.
Использование системных приложений
В большинстве операционных систем пользователь устанавливает для себя браузер по умолчанию, который открывается, когда пользователь выбирает файл с расширением html. Файлы с другими расширениями тоже часто связываются с приложениями, обрабатывающими их. Например, файл с расширением txt часто открывается в текстовом редакторе. Кроме того, пользователь может выбрать для себя почтовый клиент по умолчанию.
Эти возможности использует класс Desktop из пакета java.awt. У него есть методы, позволяющие запустить некоторые приложения пользователя:
□ browse(uri file) — открывает браузер по умолчанию, загружающий указанный файл
file;
□ mail () — открывает почтовый клиент по умолчанию;
□ mail (uri mailto) — открывает почтовый клиент по умолчанию, заполняя поля "To", "Cc", "Subject", "Body" значениями, взятыми из аргумента mailto;
□ edit(File file) — открывает текстовый редактор, связанный с указанным файлом file, и загружает в него файл file;
□ open(File file) — открывает указанный файл file;
□ print(File file) — печатает указанный файл file на принтере, назначенном этому файлу.