Читаем Графические интерфейсы пользователя Java полностью

После создания панели меню и меню, в меню добавляются элементы меню, которые на самом деле содержатся в меню 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.

Перейти на страницу:

Похожие книги

Programming with POSIX® Threads
Programming with POSIX® Threads

With this practical book, you will attain a solid understanding of threads and will discover how to put this powerful mode of programming to work in real-world applications. The primary advantage of threaded programming is that it enables your applications to accomplish more than one task at the same time by using the number-crunching power of multiprocessor parallelism and by automatically exploiting I/O concurrency in your code, even on a single processor machine. The result: applications that are faster, more responsive to users, and often easier to maintain. Threaded programming is particularly well suited to network programming where it helps alleviate the bottleneck of slow network I/O. This book offers an in-depth description of the IEEE operating system interface standard, POSIX (Portable Operating System Interface) threads, commonly called Pthreads. Written for experienced C programmers, but assuming no previous knowledge of threads, the book explains basic concepts such as asynchronous programming, the lifecycle of a thread, and synchronization. You then move to more advanced topics such as attributes objects, thread-specific data, and realtime scheduling. An entire chapter is devoted to "real code," with a look at barriers, read/write locks, the work queue manager, and how to utilize existing libraries. In addition, the book tackles one of the thorniest problems faced by thread programmers-debugging-with valuable suggestions on how to avoid code errors and performance problems from the outset. Numerous annotated examples are used to illustrate real-world concepts. A Pthreads mini-reference and a look at future standardization are also included.

David Butenhof

Программирование, программы, базы данных
Разработка ядра Linux
Разработка ядра Linux

В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программны интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей различными интересами и потребностями.Книга может быть рекомендована как начинающим, так и опытным разработчикам программного обеспечения, а также в качестве дополнительных учебных материалов.

Роберт Лав

Программирование, программы, базы данных / Программирование / Книги по IT