Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Обработка и передача событий




Когда компонент, расположенный внутри панели, получает событие, этому компоненту первому предоставляется возможность его обработать. Если компонент не обработает событие до конца (и не запретит другим компонентам продолжать обработку), то событие передается другим компонентам панели и, в конце концов, - панели. Если панель находится внутри другой панели и не запретит дальнейшую обработку события, то после завершения обработки внутренней панелью событие перейдет ко внешней панели. Однако, если существует множество панелей, вложенных одна в другую, передача событий может усложниться. Например, существует пять панелей, одна внутри другой: panel5 находится внутри panel4, panel4 - внутри panel3, panel3 - внутри panel2, panel2 - внутри panel1, а panel1 - внутри апплета. При нажатии на кнопку на panel5 первой событие нажатия кнопки получит сама кнопка, Затем, если обработка события не была прервана, то оно перейдет к panel5, и дальнейшую обработку события делает panel5. Если panel5 не прервет дальнейшую обработку, то событие затем перейдет к panel4 и так до тех пор, пока не дойдет до апплета.

При использовании вложенных панелей важно понять, что порядок их добавления определяет их иерархию. Иерархия обработки событий обратна последовательности добавления компонентов. Если событие не было до конца обработано ни одним компонентом и даже апплетом, то оно передается системе управления, в которой выполняется данная программа. Эта система отвечает за конечную обработку события и его завершение.

1.2 Окна

Окна (класс Window), как и панели, являются общим классом контейнеров. Но в отличие от панелей окно Java представляет собой окно - объект операционной системы, существующий отдельно от окна WWW-броузера или программы просмотра апплетов.

Непосредственно класс Window никогда не используется, а используются три его подкласса Frame, Dialog и FileDialog. Каждый их этих подклассов содержит все функции исходного класса Window, добавляя к ним несколько специфических свойств (см. описание методов этих подклассов ниже).

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

· Window - Конструктор, который создает окно, первоначально не видимое. Окно ведет себя как модальное диалоговое окно, т.е. пока это окно отображается, оно блокирует ввод в другие окна. В качестве параметра конструктору передается владелец окна - объект класса Frame

· show - Отображает окно. Окно появится на переднем плане, если оно было видимым до этого

· dispose - Удаляет окно. Этот метод необходимо вызвать для освобождения ресурсов, занимаемых окном

· toFront - Переносит рамку на передний план окна

· toBack - Переносит рамку на задний план окна

Точно также, как и в случае с панелями, можно использовать любые методы контейнера применительно к окнам. Например, созданное окно или диалог можно переместить с помощью метода move() или изменить его размеры методом resize().

При создании окна обязательным параметром конструктора Window() является объект класса Frame. Этот объект можно создать непосредственно при вызове конструктора окна. Так как окна изначально создаются невидимыми, отобразить их на экране можно, лишь вызвав метод show(). Правда, перед этим иногда полезно придать окну нужные размеры и разместить окно в нужной позиции. Если перемещать окно в видимом состоянии, то это может вызвать неприятное мерцание на экране. Приведем пример создания окна и отображения окна:

Window win=new Window(new Frame)); // создание окна

win.resize(200,300); // изменение его размеров

win.move(50,50); // перемещение окна

win.show(); // отображение окна

Если окно видимо, то его можно сделать невидимым при помощи метода hide(). Этот метод не удаляет объект окна, просто он делает окно невидимым.

1.3 Рамки, фреймы

Фрейм (класс Frame) - это объект, который может существовать без всякой связи с окном WWW-броузера. С помощью класса Frame можно организовать интерфейс независимого апплета. Окно, созданное на базе класса Frame, больше всего похоже на главное окно обычного приложения Windows, и может пользоваться большим количеством методов класса Frame. Оно автоматически может иметь главное меню (так как класс Frame реализует интерфейс MenuContainer), для него можно устанавливать форму курсора и пиктограмму. Внутри такого окна можно рисовать. Так как окно класса Frame произошло от класса Container, то в него можно добавлять различные компоненты и панели, так же как в делается для апплетов и панелей. Нужно отметить, что по умолчанию для окон класса Frame устанавливается режим размещения BorderLayout.

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

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

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

· getIconImage - Возвращает пиктограмму

· setIconImage - Устанавливает пиктограмму

· getMenuBar - Возвращает ссылку на объект меню класса MenuBar

· setMenuBar - Устанавливает меню

· remove - Удаляет указанную строку меню

· dispose - Удаляет фрейм. Этот метод необходимо вызвать для освобождения ресурсов, занимаемых фреймом

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

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

· setCursor - Устанавливает вид курсора с использованием констант класса Frame

· getCursorType - Возвращает тип курсора

Если необходимо создать фрейм только ради меню, то стоит воспользоваться стандартным объектом класса Frame:

Frame fr=new Frame("Title for frame");

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

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

Для создания подкласса класса Frame необходимо определить новый класс, унаследовав его от класса Frame:

class MainFrameWnd extends Frame // объявление нового класса фрейма

{

// конструктор для создания фрейма с заголовком

public MainFrameWnd(String str)

{

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

// правильного создания фрейма

super(str); // этот вызов должен быть самым первым оператором

// задание необходимых размеров окна фрейма

resize(400,200);

// здесь можно определить различные параметры фрейма,

// например, форму курсора, пиктограмму, задать меню и др.

..................

}

// обработка событий фреймом MainFrameWnd, например

// таких, как закрытие окна, события меню и т.д.

public boolean handleEvent(Event evt)

{ switch (evt.id)

{ case Event.WINDOW_DESTROY:

// --------------------

// различные завершающие действия

...........................

// удаление окна

dispose();

// если это класс главных окон, то завершение

// всей программы методом System.exit(0);

return true;

default:

// ---------------------------------------

// передача необработанных действий

return super.handleEvent(evt);

}

return true;

}

}

После объявления класса можно создавать объекты этого класса, вызывая для отображения окна метод show():

MainFrameWnd fr=new MainFrameWnd("Title for frame");

fr.show();

Меню

Меню являются стандартным элементом интерфейса современных программ. Меню Java генерируют события, для которых программист создает обработчики. Классы MenuBar и Menu позволяют конструировать удобные меню и интегрировать их в структуру апплета. Все фреймы автоматически реализуют интерфейс MenuContainer, поэтому, пожалуй, они являются единственным классом контейнеров, в которых стоит использовать меню. Теоретически же меню может быть добавлено в любой контейнер. Для того, что создать и добавить меню в контейнер, необходимо сначала создать панель меню (объект класса MenuBar), затем добавить в нее меню (объект класса Menu). В выпадающие меню класса Menu также можно добавлять элементы (строки или объекты класса MenuItem). Подготовленную панель меню теперь можно ввести в контейнер его методом add().




Поделиться с друзьями:


Дата добавления: 2014-11-20; Просмотров: 337; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.