Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
101
Добавлен:
30.03.2021
Размер:
42.12 Mб
Скачать

ГЛАВА 36

Введение в меню JavaFX

Меню

являются

неотъемлемой

частью

ГПИ

многих

приложений,

поскольку

они

предоставляют

пользователю

доступ

к

основным

функциональным

возмож­

ностям

прикладной

программы.

Более

того,

надлежащая

реализация

меню

счита­

ется необходимой составляющей построения удачного ГПИ приложения.

В связи

с тем что меню играют главную роль во многих приложениях, в JavaFX обеспечи­

вается обширная поддержка меню. И, к счастью, эта поддержка не только

мощная,

но

и рациональная.

Как поясняется в

этой

главе,

меню

в

JavaFX

имеют

немало

общего

с

меню

в

Swing,

описанными

в

главе

33.

Поэтому

если

вы

уже

знаете,

как

создаются

меню

в

Swing,

то

научиться

делать

это

в

JavaFX

вам

будет

нетрудно.

Но

у

обеих

разновидностей

меню

имеется

ряд

отличий,

поэтому

очень

важно

не

спешить

с

выводами

относительно

системы меню в JavaFX. Система меню в JavaFX

поддерживает

ряд

основных

элементов,

включая

сле­

дующие.

• •

Строка меню, в которой находится главное меню приложения.

Стандартное меню, которое может содержать выбираемые пункты или дру­

гие меню, называемые подменю.

Контекстное меню, которое нередко активизируется щелчком правой кноп­ кой мыши. Контекстные меню иначе называются всплывающими.

Кроме того,

системе

меню JavaFX

поддерживаются

оперативные

клавиши,

по­

зволяющие

выбирать

пункты

меню,

не

активизируя

его,

а

также

мнемоника,

до­

пускающая

выбор

пунктов

с клавиатуры

после

раскрытия

меню.

Помимо

обычных

меню,

в

JavaFX

поддерживается

панель

инструментов,

предоставляющая

быстрый

доступ

к

функциональным

возможностям

прикладной

программы

и

зачастую

дей­

ствующая

параллельно

пунктам

меню.

Основные

положения

о

меню

Система

меню

в

JavaFX

опирается

на

группу

взаимосвязанных

классов,

входящих

в

состав пакета

j

avafx.

scene.

control.

В

этой

главе

рассматриваются

классы,

перечисленные

в

табл.

36.1.

Они

составляют

ядро

системы

меню

в

JavaFX.

Несмотря

Глава

36.

Введение

в

меню

JavaFX

1357

мо

создать

сначала

объект

типа

Menu

и

заполнить

его

объектами

типа

Menuitem,

представляющими

пункты

меню,

а

затем

ввести

его

в

другой

объект

типа

Menu.

Этот

процесс

будет

продемонстрирован

в

представленных

далее

примерах.

Когда

выбирается

пункт меню,

генерируется

событие

действия.

Текст,

связан­

ный

с

выбранным

пунктом меню,

обозначает

его

наименование.

Следовательно,

проанализировав

наименование

пункта

меню

при

обработке

событий

действия

от

всех

выбираемых пунктов

меню

в

одном

обработчике,

можно

выяснить,

какой

именно

пункт

меню

был

выбран.

Безусловно,

для

обработки

событий

действия

от

каждого

пункта

меню

можно

также

воспользоваться

отдельными

анонимными

классами

или

лямбда-выражениями.

В

этом

случае

выбранный

пункт

меню

уже

из­

вестен,

и

поэтому

нет

нужды

анализировать

его

наименование,

чтобы

выяснить,

какой именно пункт меню был выбран.

 

Помимо меню, раскрывающихся из

строки

главного

меню,

можно

создавать

ав­

тономные

контекстные

меню,

которые

всплывают,

когда

активизируются.

С

этой

целью

следует сначала

создать

объект

типа

ContextMenu,

а

затем ввести

в

него

объекты

типа

Menuitem

в

виде

пунктов

меню.

Как

правило,

контекстное

меню

активизируется щелчком

правой

кнопкой

мыши,

когда

курсор

находится

на

том

элементе

управления,

для

которого

определено

всплывающее

меню.

Следует,

од­

нако,

иметь

в

виду,

что

класс

ContextMenu

является

производным

не

от

класса

Menuitem, а от класса PopupControl.

С меню связано еще одно средство, называемое

панелью

инструментов.

В

би­

блиотеке

JavaFX

панели

инструментов

поддерживаются

в

классе

ToolBar,

соз­

дающем

автономный

компонент,

который

нередко

служит

для

быстрого

доступа

к

функциональным

возможностям,

имеющимся

в

меню

приложения.

Например,

панель

инструментов

может

предоставлять

быстрый

доступ

к

командам

формати­

рования,

которые

поддерживаются

в

текстовом

редакторе.

Краткий

обзор

классов

MenuBar,

Menu

и

Menuitem

Чтобы

создавать

меню

в

JаvаFХ-приложении,

нужно

знать

некоторые

особен­

ности

трех

основных

классов

меню:

MenuBar,

Menu

и

Menuitem.

Эти

классы

со­

ставляют

тот

минимум

средств,

которые

требуются

для

создания

главного

меню

приложения. Кроме того, объекты

текстных (т.е. всплывающих) меню.

класса Menuitem служат для создания кон­

Таким образом, эти классы образуют основа­

ние

системы

меню

в

JavaFX.

Класс

MenuBar

ет

Класс MenuBar, по

существу, служит

контейнером

для меню. Он

реализу­

элемент управления,

предоставляющий

главное меню

приложения.

Как и все

остальные

классы

элементов

управления

JavaFX,

он

наследует

от

класса

Node.

Следовательно,

объект

этого

класса

можно

ввести

как

строку

меню

в

граф

сцены.

Глава

36.

Введение

в

меню

JavaFX

1359

одно

меню может

служить

подменю

для

другого.

В

классе

Menu

определяются

че­

тыре конструктора, но

дующий конструктор:

наиболее

употребительным

из

них,

вероятно,

является

сле­

Menu(String

имя)

Этот

конструктор

создает

меню

с

заголовком,

обозначаемым

параметром

имя.

Вместе

с

текстом

заголовка

можно

также

указать

изображение,

используя

следую­

щий

конструктор:

Menu(String

имя,

Node

изображение)

Здесь

параметр

изображение

обозначает

воспроизводимое

изображение.

Но

в

любом

случае

меню

остается

пустым

до

тех

пор,

пока

в

него

не

будут

введены

от­

дельные

пункты.

Третий

конструктор

позволяет

указать

первоначальный

ряд

пун­

ктов

меню,

как

показано

ниже.

Menu(String имя,

Menuitem ...

Node изображение, пункты_меню)

И

наконец,

присваивать

наименование

меню

совсем

не

обязательно.

Для

созда­

ния

безымянного

меню

можно

воспользоваться

приведенным

ниже конструкто­

ром

по

умолчанию.

В этом

случае

наименование

и/или

изображение

можно

ввести

задним

числом,

вызвав

метод

setтext

()

или

setGraphic ().

Menu()

В

каждом

меню

поддерживается

свой

список

пунктов

меню,

которые

оно

со­

держит.

Чтобы

добавить

пункт

в

меню,

необходимо

составить

прежде

список

из

его

пунктов.

С

этой

целью

сначала

вызывается

метод

getitems

(),общая

форма

которого

приведена

ниже.

final

ObservaЬleList<Menuitem>

getitems()

Этот

метод

возвращает

список

пунктов,

связанных

в данный

момент

с

меню.

Для

ввода

пунктов

в

этот

список

вызывается

метод

add

( )

или

addAl

l

( ) .

Среди

прочих

действий

можно

удалить

пункт

из

меню,

вызвав

метод

remove

( ) ,

а также

получить

размер

списка,

вызвав

метод

size

().

И

наконец,

в

список

пунктов

меню

можно

ввести

разделитель,

представленный

объектом

типа

Separ

а

t

о

rMen

u I t

em.

Разделители

помогают

лучше

организовать

длинные меню, группируя связанные элементы

пункты в меню, например пункт Exit в меню File.

вместе,

а

также

отделить

важные

Класс

Menuitem

Класс

Menuitem

инкапсулирует

пункт

меню.

Этот

пункт

может

выбираться

и

связываться

с

конкретным

действием

в

прикладной

программе,

например

Save

(Сохранить)

или

Close

(Закрыть),

или

же

приводить

к

появлению

подменю.

В

клас­

се

Menuitem

определяются

следующие

конструкторы:

Menuitem()

Menuitem(String

Menuitem(String

имя) имя,

Node

изображение)

1384

Часть

IV.

Введение

в

программирование

ГПИ

средствами

JavaFX

about.setOnAction(MEHandler);

11 ввести меню Help в строку

mЬ.getMenus() .add(helpMenu);

главного

меню

11 создать пункты контекстного

void makeContextMenu()

{

меню

// создать пункты /!из контекстного

для выбора меню

команд

редактирования

Menuitem

Menuitem

Menuitem

cut = сору= paste

new

Menuitem("Cut"); //Вырезать

 

new

 

Menuitem("Copy"); //Копировать

=

new

Menuitem("Paste"); //Вставить

/!

создать

контекстное

(т.е.

всплывающее)

меню

// с пунктами

editMenu = new

для выбора команд ContextMenu(cut,

редактирования сору, paste);

/!установить

обработчики событий

11 для пунктов

контекстного меню

cut.setOnAction(MEHandler);

copy.setOnAction(MEHandler);

paste.setOnAction(MEHandler);

действия

//

создать панель

инструментов

void

makeToolBar()

{

 

 

 

 

//

создать кнопки

для

панели инструментов

 

Button

btnSet =

new

Button("Set Breakpoint",

 

 

 

 

new

ImageView("setBP.gif") );

 

Button

btnClear

=

new

Button("Clear Breakpoint",

 

 

 

 

 

new

ImageView("clearBP.gif") );

 

Button

btnResume

=

 

new

Button("Resume Execution",

 

 

 

 

 

 

new

ImageView("resume.gif"));

11

отключить текстовые

надписи

на

кнопках

btnSet.setContentDisplay(ContentDisplay.GRAPHIC_ONLY); btnClear.setContentDisplay( ContentDisplay.GRAPHIC_ONLY); btnResume.setContentDisplay( ContentDisplay.GRAPHIC_ONLY);

// задать всплывающие

подсказки для

кнопок

btnSet.setTooltip(new

Tooltip("Set а

breakpoint."));

//Установить точку

прерывания

 

btnClear.setTooltip(new

Tooltip(

 

"Clear

а breakpoint."));

11 Очистить точку

прерывания

 

btnResume.setTooltip(new

Tooltip("Resume execution.")

11 Возобновить

выполнение

 

);

/! создать

панель инструментов

tbDebug =

new ToolBar(btnSet, btnClear,

btnResume);

/! 11

создать обработчик событий на панели инструментов

от

кнопок

ЧАСТЬ v

ГЛАВА37 Компоненты Java Beans

ГЛАВАЗВ Введение в сервлеты

Применение

Java

Соседние файлы в папке Лабораторные работы (Объектно-ориентированное программирование (ООП))