- •Основные компоненты
- •Класс Component
- •Класс Container
- •Компонент Button
- •Компонент Checkbox
- •Класс CheckboxGroup
- •Компонент Choice
- •Компонент TextField
- •Компонент TextArea
- •Компонент Scrollbar
- •Контейнер Panel
- •Контейнер ScrollPane
- •Контейнер Window
- •Контейнер Framе
- •Контейнер Dialog
- •Контейнер FileDialog
- •Создание собственных компонентов
- •Компонент Canvas
- •Создание "легкого" компонента
Контейнер Framе
Контейнер Frame – это полноценное готовое окно со строкой заголовка, в которую помещены кнопки контекстного меню, сворачивания окна в ярлык и разворачивания во весь экран и кнопка закрытия приложения. Заголовок окна записывается в конструкторе или методом setTitie(string title). Окно окружено рамкой. В него можно установить строку меню методом setMenuBar (MenuBar mb).
На кнопке контекстного меню в левой части строки заголовка изображена дымящаяся чашечка кофе – логотип Java. Можно установить там другое изображение методом setIconImage(image icon), создав предварительно изображение icon в виде объекта класса image.
Все элементы окна Frame вычерчиваются графической оболочкой операционной системы по правилам этой оболочки. Окно Frame автоматически регистрируется в оконном менеджере графической оболочки и может перемещаться, менять размеры, сворачиваться в панель задач (task bar) с помощью мыши или клавиатуры, как "родное" окно операционной системы.
Создать окно типа Frame можно следующими конструкторами:
Frame () – создает окно с пустой строкой заголовка;
Frame (string title) – записывает аргумент title в строку заголовка.
Методы класса Frame осуществляют доступ к элементам окна, но не забывайте, что класс Frame наследует около двухсот методов классов Component, Container и window. В частности, наследуется менеджер размещения по умолчанию – BorderLayout.
Кроме событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent , при изменении размеров окна, его перемещении или удалении с экрана, а также показа на экране происходит событие windowEvent.
Листинг 10.5. Создание двух окон
import j ava.awt.* ;
import java.awt.event.*;
class TwoFrames{
public static void main(String[] args){
Fr1 fl=newFr1(" Основное окно");
Fr2 f2=newFr2(" Второе окно");
}
}
classFr1extendsFrame{
Fr1(String s){
super(s);
setLayout(null);
Font f = newFont("Serif", Font.BOLD, 15);
setFont(f);
Label l = newLabel("Это главное окно", Label.CENTER);
l.setBounds(10, 30, 180, 30);
add(l);
setSize(200, 100);
setVisible(true);
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvent ev){
System.exit(0);
}
});
}
}
classFr2extendsFrame{
Fr2(String s){
super(s);
setLayout(null) ;
Font f = newFont("Serif", Font.BOLD, 15);
setFont(f);
Label l = newLabel("Это второе окно", Label.CENTER);
l.setBounds(10, 30, 180, 30);
add(l);
setBounds(50, 50, 200, 100);
setVisible(true);
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvent ev) {
dispose ();
}
});
}
}
Рис. 10.5. Программа с двумя окнами
Контейнер Dialog
Контейнер Dialog – это окно обычно фиксированного размера, предназначенное для ответа на сообщения приложения. Оно автоматически регистрируется в оконном менеджере графической оболочки, следовательно, его можно перемещать по экрану, менять его размеры. Но окно типа Dialog, как и его суперкласс – окно типа window, – обязательно имеет владельца owner, который указывается в конструкторе. Окно типа Dialog может быть модальным (modal), в котором надо обязательно выполнить все предписанные действия, иначе из окна нельзя будет выйти.
В классе семь конструкторов. Из них:
Dialog (Dialog owner) – создает немодальное диалоговое окно с пустой строкой заголовка;
Dialog (Dialog owner, string title) – создает немодальное диалоговое-окно со строкой заголовка title;
Dialog(Dialog owner, String title, boolean modal) – создает диалоговое окно, которое будет модальным, если modal == true.
Четыре других конструктора аналогичны, но создают диалоговые окна, принадлежащие окну типа Frame:
Dialog(Frame owner)
Dialog(Frame owner. String title)
Dialog(Frame owner, boolean modal)
Dialog(Frame owner, String title, Boolean modal)
Среди методов класса интересны методы: isModal (), проверяющий состояние модальности, и setModal(boolean modal), меняющий это состояние.
Кроме Событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent , при изменении размеров окна, его перемещении или удалении с экрана, а также показа на экране происходит событие windowEvent.
Листинг 10.6. Модальное окно доступа
import j ava.awt.*;
import Java.awt.event.*;
classLoginWinextendsDialog{
LoginWin(Frame f, String s){
super(f, s,true);
setLayout(null);
setFont(newFont("Serif", Font.PLAIN, 14));
Label l1 = newLabel("Ваше имя:", Label.RIGHT);
l1.setBounds(20, 30, 70, 25); add(l1);
Label l2 = newLabel("Пароль:", Label.RIGHT);
l2.setBounds(20, 60, 70, 25); add(l2);
TextField tfl = newTextField(30);
tfl.setBounds(100, 30, 160, 25); add(tfl);
TextField tf2 = newTextField(30);
tf2.setBounds(100, 60, 160, 25); add(tf2);
tf2.setEchoChar('*');
Button bl = newButton("Применить");
bl.setBounds(50, 100, 100, 30); add(bl);
Button b2 = newButton("Отменить");
b2.setBounds(160, 100, 100, 30); add(b2);
setBounds(50, 50, 300, 150); } }
classMy_winextendsFrame{
My_win(String s){
super(s);
setLayout(null); setSize(200, 100);
setVisible(true);
Dialog d =newLoginWin(this,"Окно входа"); d.setVisible(true);
}
publicstaticvoidmain(String[] args){
Frame f = newMy_win(" Окно-владелец");
f.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvent ev){
System.exit(0);
}
});
}
}
Рисунок. 1.6. Модальное окно доступа