Контейнер 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); 

}

}); 

}