После создания панели меню и меню, в меню добавляются элементы меню, которые на самом деле содержатся в меню JPopupMenu, появляющемся при нажатии меню.
Элементы меню добавляются в меню методом add.
Туда же можно и добавлять разделители между элементами меню.
При создании элемента меню в нем можно задать текст, изображение, или сразу и то и другое с помощью конструктора класса JMenuItem.
Также, при создании элемента меню можно задать для него горячие клавиши, методом setAccelerator.
При этом горячие клавиши будут отображаться в элементе меню.
К элементу меню обычно присоединяют слушателя событий, который обрабатывает нажатие элемента меню и выполняет действие, для которого этот элемент меню собственно и создавался.
Для меню и элементов меню можно назначить мнемонику или клавиши выбора с помощью метода setMnemonic.
Здесь для меню File мы назначаем комбинацию клавиш Alt + F, при нажатии на которые открывается меню.
Затем мы назначаем мнемонику или клавишу Е для элемента меню Exit.
Чтобы воспользоваться этой клавишей, мы сначала нажимаем Alt + F, то есть открываем меню, а затем нажимаем E и срабатывает этот элемент меню.
В отличие от мнемоники, клавиши акселерации сразу нажимают элемент меню.
Меню и элемент меню также можно создать на основе объекта Action, инкапсулирующего свойства, которые могут быть повторно использованы.
Объект Action может быть использован для разделения функциональности и состояния от самого компонента.
Например, если у вас есть два или более компонента, которые выполняют одну и ту же функцию, можно использовать один объект Action для создания этих компонентов.
Объект Action – это слушатель действий, который обеспечивает не только обработку событий, но также централизованную обработку состояния компонентов, связанных с событием, таких как элементы меню.
Состояние, которое обрабатывается этим действием, включает в себя текст, значок, мнемонику, активацию и выбранный статус.
В этом примере мы создаем действие Action, в котором задаем надпись элемента меню, его клавиши акселерации, и обработчик нажатия элемента меню, в котором мы показываем диалоговое окно подтверждения действия.
Далее мы создаем элемент меню на основе объекта Action и добавляем этот элемент в само меню.
JCheckboxMenuItem и JRadioButtonMenuItem
Помимо простого элемента меню, есть компоненты JCheckboxMenuItem и JRadioButtonMenuItem, представляющие флажок и радиокнопку для добавления в меню.
В этом примере обработчик выбора флажка позволяет динамически добавляет и удалять элементы меню.
Отследить состояние выбора флажка позволяет метод getState.
В этом примере мы создаем две радиокнопки и объединяем их в группу.
Чтобы могла быть выбрана только одна кнопка.
В обработчике событий выбора радиокнопки мы используем команду, присвоенную кнопке, как ее идентификатор при выборе радиокнопки.
JPopupMenu
Всплывающее меню JPopupMenu используется обычно как контекстное меню.
Оно появляется при нажатии правой кнопки мыши на компоненте, к которому привязано.
Для создания всплывающего меню используется конструктор класса, в котором можно указать заголовок меню.
Затем создаются элементы меню, которые добавляются в всплывающее меню.
Для того чтобы всплывающее меню появилось, к компоненту добавляется слушатель событий мыши.
В обработчике этого слушателя, для события мыши вызывается метод isPopupTrigger, который возвращает подтверждение, является ли это событие мыши событием всплывающего меню.
Всплывающие меню запускаются по-разному на разных платформах.
Поэтому событие isPopupTrigger следует проверять как в методе mousePressed, так и в методе mouseReleased для правильной межплатформенной функциональности.
JSpinner и JSlider
Компонент JSpinner работает аналогично компонентам JList и JComboBox, но вместе с компонентом JFormattedTextField.
В компоненте JList и JComboBox пользователь может выбирать ввод из заданного набора значений.
Компонент JSpinner также позволяет использовать этот тип выбора.
Другая половина компонента JSpinner – это форматированное поле JFormattedTextField.
В компоненте JSpinner, как отображать или вводить значение не контролируется средством отображения списка ListCellRenderer, как в JList.
Вместо этого вы получаете форматированное поле JFormattedTextField для ввода и пару стрелок для перемещения по различным значениям, доступным для форматированного поля.
Так как для ввода и отображения в компоненте JSpinner у нас есть форматированное поле JFormattedTextField, мы имеем три предустановленных типа ввода – это список строк, последовательность объектов Number, и последовательность объектов Date.
Для создания компонента JSpinner, сначала создается его модель данных.
Предустановленные модели данных – это SpinnerDateModel, SpinnerListModel, и SpinnerNumberModel.
Эти классы расширяют абстрактный класс AbstractSpinnerModel.
Поэтому, если вы хотите создать свою собственную модель данных, вам нужно создать свою собственную реализацию абстрактного класса AbstractSpinnerModel.