

ГЛАВА 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