Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
82
Добавлен:
24.02.2016
Размер:
257.54 Кб
Скачать

Контекстные меню

Класс PopupMenuобеспечивает функциональность для указанного меню. Конструкторы класса имеют вид:

public PopupMenu();

public PopupMenu(String title);

Класс наследует от класса Menu, поэтому вся функциональность классаMenuздесь поддерживается.

Пример 1. Выпадающее меню

import javax.swing.*;

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class Popup extends Applet implements ActionListener{

String colorNames[] = {"Gray","Red","Blue","White"};

Color colors[] = {Color.gray,Color.red,Color.blue,Color.white};

PopupMenu pm;

public void init()

{

setBackground(Color.gray);

pm = new PopupMenu("Фоновый цвет");

MenuItem colorName;

for ( int i = 0; i <colorNames.length; i++)

{

colorName = new MenuItem(colorNames[i]);

pm.add(colorName);

colorName.addActionListener(this);

pm.addSeparator();

}

add(pm);

MouseListener ml = new MouseAdapter()

{

public void mouseReleased(MouseEvent e)

{

pm.show(e.getComponent(),e.getX(),e.getY());

}

};

addMouseListener(ml);

}

public void actionPerformed(ActionEvent e)

{

setBackground(getColor(e.getActionCommand()));

}

private Color getColor(String name)

{

for ( int i = 0; i <colorNames.length; i++)

{

if (colorNames[i].equals(name))

return colors[i];

}

return Color.white;

}

public static void main(String[] args) {

JFrame frame = new JFrame ("Пример");

int width = 800;

int height = 300;

Popup appl = new Popup();

appl.init();

frame.getContentPane().add(appl);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(width,height);

frame.setVisible(true);

}}

В приведенном примере при щелчке кнопкой в области апплета появляется меню для выбора цвета, и область апплета перекрашивается. Обратите внимание, как реализована обработка событий от мыши и от команд меню.

Диалоги

Кроме окон и фреймов есть особый подкласс окон, называемый диалоговыми окнами или просто диалоги. В отличие от фреймов или обычных окон диалог предоставляет пользователю окно, в котором нужно выполнить те или иные действия, лишь по завершении которых пользователь сможет продолжить работу с программой.

Диалоговые окна

Диалоговые окна (класс Dialog)используются в основном для одноразового запроса информации у пользователя или для вывода небольших порций информации на экран. Диалоговые окна во всем подобны фреймам, но имеют два важных отличия:во-первых, они не являются реализацией интерфейса MenuContainer (а следовательно не реализуют панель меню автоматически);во-вторых, они могут иметьмодальность- это значит, что можно сконструировать диалоговое окно, которое запретит пользователю обращаться к другим окнам (включая и окно WWW-навигатора) до тех пор, пока пользователь не произведет требуемого действия в этом диалоговом окне.

Некоторые методы класса Dialog:

  • getTitle - Возвращает заголовок

  • setTitle - Устанавливает заголовок

  • isResizable - Проверяет, может ли пользователь изменять размер фрейма

  • setResizable - Устанавливает флаг разрешения изменения фрейма

  • isModal - Определяет, является ли диалоговая панель модальной

При создании диалогового окна его модальность задается указанием особого параметра вызова конструктора. Таким образом, диалоговое окно дает выбор: позволить ли пользователю продолжить работу, не обращая внимания га диалоговое окно, или же потребовать от него особой реакции на сообщение в этом окне.

Для окон класса Dialog устанавливается режим размещения BorderLayout. Если нужен другой режим размещения, то необходимо установить его явным образом методом setLayout().

Для отображения окна диалоговой панели необходимо вызвать метод show(). Чтобы спрятать окно, необходимо использовать метод hide(). Метод dispose удаляет окно диалоговой панели окончательно и освобождает все связанные с ним ресурсы.

Когда пользователь пытается уничтожить окно диалоговой панели при помощи органов управления, расположенных в заголовке такого окна, возникает событие Event.WINDOW_DESTROY. Необходимо обработать это сообщение, обеспечив удаление окна диалоговой панели вызовом метода dispose(), если это, конечно, соответствует логике работы этого диалога.

Диалоговые окна удобны для приглашения пользователя к выполнению какого-либо действия и для подтверждения того, что пользователь ознакомился с сообщением программы. Диалоговые окна в отличие от фреймов не реализуют панель меню автоматически. Поскольку диалоговые окна обычно меньше по размерам, чем фреймы, они бывают удобны для быстрого диалога с пользователем.

При работе с диалоговыми окнами важно помнить одно правило: каждое диалоговое окно обязательно должно иметь фрейм в качестве родителя.Это значит, что диалоговое окно нельзя открыть непосредственно из апплета. Чтобы создать диалоговое окно, необходимо сначала завести фрейм, даже если его единственным значением будет служить родителем для диалогового окна. Только если апплет уже использует фреймы, можно обойтись без этой подготовительной стадии.

Создание подкласса Dialog

Для того, чтобы создать свою диалоговую панель, необходимо определить новый класс, унаследовав его от класса Dialog. Например, создадим класс окон сообщений:

class MessageBox extends Dialog // объявление нового класса диалога

{

// конструктор для создания диалогового окна для вывода

// сообщения sMsg, заголовок окна передается через sTitle.

// родительский фрейм - через parent, модальность - через modal

public MessageBox(String sMsg,Frame parent,String sTitle,boolean modal)

{

// обязательный вызов конструктора суперкласса для

// правильного создания окна диалога

// этот вызов должен быть самым первым оператором

super(parent,sTitle,modal);

// задание необходимых размеров окна диалога

resize(400,200);

// здесь можно создать все необходимые компоненты для

// размещения внутри диалоговой панели, а также установить

// нужный режим размещения этих компонент

}

}

Теперь можно создавать диалоги этого класса следующим оператором:

MessageBox msgBox=new MessageBox("String of message",new Frame(), "Message box",true)

Обработка событий диалога в Java 1.1

Для обработки событий в диалоге просто назначьте прослушивание для нужных компонентов диалога.

// создание диалога

if ( str == "New") { MyDialog mydlg = new MyDialog(new Frame(),"QQQQQQQQQ"); } //...

// класс диалога

class MyDialog extends Dialog

{

Button fOK;

MyDialog (Frame fr, String mess)

{

super(fr,mess,true);// для немодального диалога - false

fOK = new Button("OK");

add(fOK);

fOK.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e )

{

setVisible(false);

}

});

show();

}

}