Как сделать меню в java

Добавил пользователь Евгений Кузнецов
Обновлено: 05.10.2024

В контейнер типа Frame заложена возможность установки стандартной строки меню (menu bar), располагаемой ниже строки заголовка, как показано на рис. 13.1. Эта строка – объект класса MenuBar.

Все, что нужно сделать для установки строки меню в контейнере Frame – это создать объект класса MenuBar и обратиться к методу setMenuBar ():

Если имя mb не понадобится, можно совместить два последних обращения к методам:

Разумеется, строка меню еще пуста и пункты меню не созданы.

Каждый элемент строки меню – выпадающее меню (drop-down menu) – это объект класса Menu. Создать эти объекты и занести их в строку меню ничуть не сложнее, чем создать строку меню:

…и т. д. Элементы располагаются слева направо в порядке обращений к методам add(), как показано на рис. 13.1. Во многих графических системах принято меню Справка (Help) прижимать к правому краю строки меню. Это достигается обращением к методу setHelpMenu (), но фактическое положение меню Справка определяется графической оболочкой.

Меню обеспечивает экономящий место способ позволить пользователю выбирать одну из нескольких опций. Другие компоненты, с которыми пользователь может сделать выбор "один из многих", включают поля комбинированного списка, списки, переключатели, прядильщиков, и панели инструментов. Если какой-либо из Ваших пунктов меню выполняет действие, которое дублируется другим пунктом меню или кнопкой на панели инструментов, то в дополнение к этому разделу следует читать, Как Использовать Действия.

Меню уникальны в этом, условно, они не размещаются с другими компонентами в UI. Вместо этого меню обычно появляется или в строке меню или как раскрывающееся меню. Строка меню содержит одно или более меню и имеет общепринятое, зависимое от платформы расположение — обычно вдоль вершины окна. Раскрывающееся меню является меню, которое невидимо, пока пользователь не делает специфичное для платформы действие мыши, такое как нажатие правой кнопки мыши, по раскрывающемуся поддерживающему компоненту. Раскрывающееся меню тогда появляется под курсором.

Следующие данные показывают много связанных с меню компонентов: строка меню, меню, пункты меню, пункты меню переключателя, пункты меню флажка, и разделители. Как можно видеть, у пункта меню могут быть или изображение или текст, или оба. Можно также определить другие свойства, такие как шрифт и цвет.

MenuLookDemo

[PENDING: This figure will be updated. We may also add callouts for each component type.]

Остальная часть этого раздела учит Вас компонентам меню и говорит Вам, как использовать различные функции меню:

Иерархия компонентов Меню

Вот изображение иерархии наследования для связанных с меню классов:

Поскольку данные показывают, пункты меню (включая меню) являются просто кнопками. Вы могли бы задаваться вопросом, как меню, если это - только кнопка, показывает свои пункты меню. Ответ - то, что, когда меню активируется, оно автоматически переводит в рабочее состояние раскрывающееся меню, которое выводит на экран пункты меню.

Создание Меню

Следующий код создает меню, показанные около начала этого раздела меню. Полужирные строки кода создают и соединяют объекты меню; другие кодовые наборы или настраивают объекты меню. Можно найти всю программу в MenuLookDemo.java . Другие необходимые файлы перечисляются в примере, индексируют.

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

Поскольку код показывает, чтобы установить строку меню для a JFrame , Вы используете setJMenuBar метод. Добавить a JMenu к a JMenuBar , Вы используете add(JMenu) метод. Добавить пункты меню и подменю к a JMenu , Вы используете add(JMenuItem) метод.

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

Другие методы в предыдущем коде включают setAccelerator и setMnemonic , которые обсуждаются немного позже во Включении Работе Клавиатуры. setAccessibleDescription метод обсуждается в Как к Support Assistive Technologies.

Обработка Событий из Пунктов меню

Обнаружить, когда пользователь выбирает a JMenuItem , можно прислушаться к событиям действия (как Вы были бы для a JButton ). Обнаружить, когда пользователь выбирает a JRadioButtonMenuItem , можно прислушаться или к событиям действия или к событиям элемента, как описано в том, Как Использовать Переключатели. Для JCheckBoxMenuItem s, Вы обычно прислушиваетесь к событиям элемента, как описано в том, Как Использовать Флажки.

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

MenuDemo.java . Other required files are listed in the example index. You can use Java Web Start to run MenuDemo (it requires release 6). -->

Вот код, который реализует обработку событий:

Для примеров обработки действия и событий элемента, см. кнопку, переключатель, и разделы флажка, так же как список примеров в конце этого раздела.

Включение Работе Клавиатуры

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

Мнемосхема является ключом, который заставляет уже видимый пункт меню быть выбранным. Например, в MenuDemo у первого меню есть мнемосхема A, и у ее второго пункта меню есть мнемосхема B. Это означает это, когда Вы работаете MenuDemo со стилем Java нажатие клавиш Alt и A заставляет первое меню появиться. В то время как первое меню видимо, нажимая клавишу B (с или без Высокого звука) заставляет второй пункт меню быть выбранным. Пункт меню обычно выводит на экран свою мнемосхему, подчеркивая первое возникновение мнемонического символа в тексте пункта меню как следующие шоу снимка.

B является мнемоническим символом для этого пункта меню

Акселератор является сочетанием клавиш, которое заставляет пункт меню быть выбранным, видимо ли это. Например, нажимая Высокий звук и 2 ключа MenuDemo заставляет первый элемент в подменю первого меню быть выбранным, не переводя меню в рабочее состояние. Только листовые пункты меню — у меню, которые не переводят другие меню в рабочее состояние — могут быть акселераторы. Следующий снимок показывает, как стиль Java выводит на экран пункт меню, у которого есть акселератор.

Можно определить мнемосхему или создавая пункт меню или с setMnemonic метод. Чтобы определить акселератор, используйте setAccelerator метод. Вот примеры установки мнемоники и акселераторов:

Как можно видеть, Вы устанавливаете мнемосхему, определяя KeyEvent постоянное соответствие ключу пользователь должно нажать. Чтобы определить акселератор, следует использовать a KeyStroke объект, который комбинирует ключ (определенный a KeyEvent постоянный) и маска модифицирующей клавиши (определенный ActionEvent постоянный).

Поскольку раскрывающиеся меню, в отличие от регулярных меню, не всегда содержатся компонентом, акселераторы в раскрывающихся пунктах меню не работают, если раскрывающееся меню не видимо.

Перевод в рабочее состояние Раскрывающегося Меню

Переводить раскрывающееся меню в рабочее состояние ( JPopupMenu ), следует зарегистрировать слушателя мыши на каждом компоненте, с которым должно быть связано раскрывающееся меню. Слушатель мыши должен обнаружить пользовательские запросы что раскрывающееся меню быть переведенным в рабочее состояние.

show method on the appropriate JPopupMenu instance. The following code, taken from PopupMenuDemo.java , shows how to create and show popup menus. You can use Java Web Start to run PopupMenuDemo (it requires release 6). -->

У раскрывающихся меню есть несколько интересных деталей реализации. Каждый - то каждое меню, имеет связанное раскрывающееся меню. Когда меню активируется, оно использует свое связанное раскрывающееся меню, чтобы показать его пункты меню.

Другая деталь - то, что само раскрывающееся меню использует другой компонент, чтобы реализовать окно, содержащее пункты меню. В зависимости от обстоятельств, при которых выводится на экран раскрывающееся меню, раскрывающееся меню могло бы реализовать свое "окно", используя легкий компонент (такой как a JPanel ), "mediumweight" компонент (такой как a Panel ), или тяжелое окно (что-то, что наследовалось от Window ).

Легкие всплывающие окна более эффективны чем тяжелые окна, но до Java Платформа SE 6 Обновлений 12 выпусков, они не работали хорошо, если у Вас были какие-либо тяжелые компоненты в Вашем GUI. Определенно, когда область дисплея легкого popup пересекает область дисплея тяжелого компонента, тяжелый компонент оттягивается на вершине. Это - одна из причин, что, до 6u12 выпуск, мы рекомендовали против смешивания тяжелых и легких компонентов. Если Вы используете более старый выпуск и абсолютно должны использовать тяжелый компонент в Вашем GUI, то можно вызвать JPopupMenu.setLightWeightPopupEnabled(false) отключить легкие всплывающие окна. Для получения информации о смешивающихся компонентах в 6u12 выпуск и позже, пожалуйста, см. Смешивающиеся Тяжелые и Легкие Компоненты .

Настройка Расположения Меню

Поскольку меню составляются из обычных компонентов Swing, можно легко настроить их. Например, можно добавить любой легкий компонент к a JMenu или JMenuBar . И потому что JMenuBar использование BoxLayout , можно настроить расположение строки меню только, добавляя невидимые компоненты к этому. Вот пример добавления компонента связующего звена к строке меню, так, чтобы последнее меню было в правом краю строки меню:

Вот измененное расположение меню, которое выводит на экран MenuGlueDemo:

MenuGlueDemo

MenuGlueDemo.java or by using Java Web Start to run MenuGlueDemo (it requires release 6). -->

Другой способ изменить вид меню состоит в том, чтобы изменить менеджеров по расположению, используемых, чтобы управлять ими. Например, можно изменить менеджера по расположению строки меню от значения по умолчанию слева направо BoxLayout к чему-то такой как GridLayout .

MenuLayoutDemo.java demonstrates. You can use Java Web Start to run MenuLayoutDemo (it requires release 6). -->

Вот является изображение расположения меню этим MenuLayoutDemo создает:

MenuLayoutDemo

API Меню

Следующие таблицы приводят обычно используемых конструкторов меню и методы. API для того, чтобы использовать меню попадает в эти категории:

Конструктор с Action параметр, который был представлен в 1.3, устанавливает пункт меню Action , то, чтобы заставлять свойства пункта меню быть инициализированным от Action . См. , Как Использовать Действия для деталей.

Примеры то Использование Меню

Меню используются в нескольких из наших примеров.

Пример Где Описано Примечания
MenuLookDemo Этот раздел (Создающий Меню) Простой пример, который создает все виды меню кроме раскрывающихся меню, но не обрабатывает события из пунктов меню.
MenuDemo Этот раздел (Обрабатывающий События из Пунктов меню) Добавляет обработка событий к MenuLookDemo .
PopupMenuDemo Этот раздел (Переводящий Раскрывающееся Меню в рабочее состояние) Добавляют раскрывающиеся меню к MenuDemo .
MenuGlueDemo Этот раздел (Настраивающий Расположение Меню) Демонстрирует, как влиять на расположение меню, добавляя невидимые компоненты к строке меню.
MenuLayoutDemo Этот раздел (Настраивающий Расположение Меню) Меню поперечного открытия реализаций располагаются в вертикальной строке меню.
MenuSelectionManagerDemo Добавляет обнаружение выделения к MenuDemo. Чтобы видеть эту функцию, щелкните по меню и затем переместите мышь через любой пункт меню или подменю. Однажды в секунду, текстовая область будет обновлена с информацией о в настоящий момент выделенном пункте меню, чтобы не быть перепутанной с пунктом меню, который в конечном счете выбирает пользователь. Этот демонстрационный пример использует значение по умолчанию MenuSelectionManager , который отслеживает состояние иерархии меню.
ActionDemo Как Использовать Действия Использование Action объекты реализовать пункты меню, которые копируют функциональность, обеспеченную кнопками на панели инструментов.
Framework Переводит в рабочее состояние многократные идентичные фреймы, каждого с меню в его строке меню.
InternalFrameDemo Как Использовать Внутренние рамки Использует пункт меню, чтобы создать окна.

См. Использование JavaFX Средства управления UI: учебное руководство по Меню , чтобы изучить, как создать меню в JavaFX.

задания так я могу сделать вывести массивы и т.д. только не могу сообразить как это делать через switch, как выводить через меню и нажатием клавиш. Я не давно начал изучать Java и вот такое задание на курсах дали. толком ничего не объяснили одно занятие всего было

Возврат обратно в меню, в операторе switch
Я написал программу, которая выводит на экран меню блюд, при нажатии клавишы выводится название.


Ошибка в операторе Switch
Почему тут ошибки public class TestClass < public static void main(String args) < .


Условие в операторе switch
как записать условие х-у>0 с помощью case


Условие в операторе switch
Всем привет, есть коД: switch(TYPE) < case 1: total = number1 + number2; .

После того, как мы разобрались с тем, как создать меню в Action Bar, добавим контекстное меню к каким-нибудь объектам.

В данном уроке добавим два текстовых поля, которые будут иметь контекстное меню.

  • Контекстное меню первого текстового поля будет изменять цвет и размер текста в первом текстовом поле
  • Контекстное меню второго текстового поля будет просто изменять текст во втором текстовом поле.

Первое контекстное меню будет иметь два подменю, первое будет отвечать за изменение цвета, а второе будет отвечать за изменение размера.

ActionBar в Java активити отключим, чтобы он не мешался.

  1. 1. Внешний вид контекстных меню на Java
  2. 2. Внешний вид контекстных меню на Qt QML
  3. 3. Реализация на Java
    1. 1. activity_main.xml
    2. 2. MainActivity.java
    1. 1. main.qml

    Внешний вид контекстных меню на Java





    Внешний вид контекстных меню на Qt QML





    Реализация на Java

    activity_main.xml

    В Активити создадим два текстовых поля с id:

    MainActivity.java

    Контекстное меню в Java будет создаваться через метод onCreateContextMenu.

    Данные метод вызывается каждый раз перед вызовом контекстного меню. В данном методе меню заполняется всеми необходимыми пунктами меню в зависимости от того, для какого объекта вызывается данное контекстное меню.

    Метод onCreateContextMenu содержит следующие аргументы:

    • ContextMenu , в который добавляются пункты меню
    • View - элемент экрана, для которого вызвано контекстное меню
    • ContextMenu.ContextMenuInfo – содержит доп.информацию, когда контекстное меню вызывается для элемента списка

    Для обработки кликов по пунктам меню будет использоваться метод onContextItemSelected.

    Для того, чтобы определить, как из пунктов меню был выбран, потребуется обозначить определённые id для каждого пункта меню, для этого воспользуемся переменными, обозначенными атрибутами final.

    Для регистрации элементов интерфейса для обработки контекстного меню воспользуемся методом registerForContextMenu.

    Реализация на QML

    А вот вёрстка и обработка событий контекстных меню в QML будут реализованы в одном файле main.qml

    main.qml

    В данном случае для каждого текстового поля будет создан свой объект контекстного меню. Прямо в этих текстовых полях и разместим данное контекстное меню. Для создания меню потребуется соответствующий тип QML Menu.

    Меню формируется древовидной структурой из объектов:

    • Menu - если требуется создание подменю
    • Action - действия, которые имеют сигнал triggered и обработчик onTriggered , к слову говоря, при разработке под Desktop , на эти Action можно навешать комбинации горячих клавиш.

    В данном случае не понадобится присваивать различные id для пунктов меню, поскольку каждый Action имеет свой обработчик, просто пропишем для каждого свою собственную логику поведения. Обращение к свойствам текстовых полей производится через их id:

    Рекомендуем хостинг TIMEWEB

    Рекомендуем хостинг TIMEWEB

    Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

    Читайте также: