Контейнер 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)
Среди методов класса интересны методы: isModai (), проверяющий состояние модальности, и setModal(boolean modal), меняющий это состояние.
События
Кроме Событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent , при изменении размеров окна, его перемещении или удалении с экрана, а также показа на экране происходит событие windowEvent.
В листинге 10.6. создается модальное окно доступа, в которое вводится имя и пароль. Пока не будет сделан правильный ввод, другие действия невозможны.
Листинг 10.6. Модальное окно доступа
import j ava.awt.*;
import Java.awt.event.*;
class LoginWin extends Dialog{
LoginWin(Frame f, String s){
super(f, s, true);
setLayout(null);
setFont(new Font(«Serif», Font.PLAIN, 14));
Label 11 = new Label(«Ваше имя:», Label.RIGHT);
11.setBounds(20, 30, 70, 25); add(ll);
Label 12 = new Label(«Пароль:», Label.RIGHT);
12.setBounds(20, 60, 70, 25); add(12);
TextField tfl = new TextField(30);
tfl.setBounds(100, 30, 160, 25); add(tfl);
TextField tf2 = new TextField(30);
tf2.setBounds(100, 60, 160, 25); add(tf2);
tf2.setEchoChar(‘*’);
Button bl = new Button(«Применить»);
bl.setBounds(50, 100, 100, 30); add(bl);
Button b2 = new Button(«Отменить»);
b2.setBounds(160, 100, 100, 30); add(b2);
setBounds(50, 50, 300, 150); } }
class DialogTest extends Frame{ DialogTest(String s){ super(s);
setLayout(null); setSize(200, 100);
setvisible(true);
Dialog d = new LoginWin(this, » Окно входа»); d.setvisible(true);
}
public static void main(String[] args){
Frame f = new DialogTest(» Окно-владелец»);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
}
}