как сделать меню на java
Menu Popup MenuItem
Для создания главного меню («main menu«) или всплывающего окна в java-приложении с использованием SWT используется класс Menu. В качестве параметров конструктору класса Menu необходимо передать окно приложения Shell и стиль. В зависимости от значения стиля [SWT.BAR | SWT.POP_UP] меню может иметь вид «main menu» или вид «всплывающего окна» (контекстное меню).
В тексте страницы рассматривается пример MenuExample.java создания различных видов меню. Исходный код примера меню можно скачать здесь.
Главное меню, shell main menu
Для создания главного меню («main menu«) необходимо в конструкторе Menu использовать стиль SWT.BAR. В следующем коде создается «main menu» с двумя пунктами («File», «Edit»).
Пунктам главного меню MenuItem в качестве параметра в конструктор передается родительский объект Menu и устанавливается стиль SWT.CASCADE. Стиль SWT.CASCADE определяет раскрывающийся список подпунктов main меню.
Меню с акселераторами
В следующем коде для меню «File» создаются подпункты меню «Select All» и «Exit». Для этого формируется меню submenu со стилем SWT.DROP_DOWN, который подключается к пункту меню fileitem. К каждому подпункту меню «menu item» подключены акселераторы setAccelerator, позволяющие вызвать соответcтвующий MenuItem горячими клавишами.
На следующем скриншоте представлен интерфейс формы с открытыми пунктами меню.
Меню с обработчиками выделения
В следующем примере создаются подпункты меню, к которым подключаются обработчики выделения. При выделение меню «Edit» или одного из его подпунктов в статусной строке формы отображается наименование пункта меню.
В примере используется менеджер статусной строки StatusbarManager, полное описание и пример использование которого можно увидеть на странице Статусная строка StatusbarManager.
На скриншоте представлен интерфейс формы с открытыми пунктами меню.
Всплывающие окна, shell menu popup
Для создания всплывающего окна (menu popup) необходимо в конструкторе Menu использовать стиль SWT.POP_UP. В следующем коде создается всплывающее меню, которое подключается к окну приложения Shell. Всплывающее окно (меню) с одним пунктом вызывается нажатием на правую клавишу мыши.
Всплывающее окно позиционируется по месту положения указателя мыши.
Контекстное меню, Menu
Можно подключить контекстное меню только к визуальным компонентам SWT. Продолжим развитие примера и создадим два визуальных компонента типа панели Composite и дерева со списком Tree. К каждому из компонентов подключим свое контекстное меню.
Интерфейс формы с визуальными компонентами представлен на следующем скриншоте.
Создание контекстного меню
Чтобы создать контекстное меню необходимо в конструктор класса Menu передать в качестве родительского класса Shell формы и определить стиль SWT.POP_UP. После этого можно формировать структуру контекстного меню.
Контекстное меню, также как и главное меню («main menu«), может быть представлено не только в виде линейного списка, но и иметь иерархическую структуру. В следующем коде создается контекстное меню, имеющее вложенные подпункты в виде «радиокнопок». Контекстное меню подключается к панели и по нажатию на один из пунктов меню изменяет цвет панели.
Интерфейс иерархического контекстного меню представлен на скриншоте.
Динамическая блокировка пунктов контекстного меню
Изменим немного код и подключим контекстное меню к визуальному компоненту дерева Tree. При вызове контекстного меню динамически будут блокироваться все пункты контекстного меню, за исключением выделенной записи в дереве.
Интерфейс контекстного меню с динамической блокировкой пунктов представлен на скриншоте.
Модуль создания меню MenuCreater
Описание вышеприведенного примера MenuExample, демонстрирует возможности библиотеки SWT по созданию различного вида меню. Но на практике, как правило, разработчики используют наработки, которые изменяются незначительно. Но каждый раз приходится «таскать за собой» из проекта в проект свои коды.
Мы предлагаем готовый модуль формирования меню MenuCreater, который позволяет создавать иерархическое локализованное меню, подключать акселераторы, маркировать подпункты меню различными иконками согласно описанию во внешнем файле в формате JSON. Файл с описанием структуры меню размещается в ресурсах, т.е. настраивается отдельно, но распространяется вместе с приложением внутри jar-модуля.
Основные особенности модуля MenuCreater заключаются в том, что
Листинг модуля MenuCreater
MenuCreater включает внутренний класс MenuDesc, который описывает пункт меню.
Пример тестирования MenuCreaterTest включает набор изображений для меню, ресурсные файлы для локализации, и реализует интерфейс IMenuBar.
На следующем скриншоте представлен интерфейс примера MenuCreaterTest с открытыми пунктами меню.
Блог только про Java
Учимся программировать на Java с нуля
Как создать меню в интерфейсе Java
Создать меню в Java достаточно просто. Недавно мы с вами говорили о том как создать всплывающее меню в Java. Сначала создается строка меню.
Для каждого меню создается свой объект:
Меню верхнего уровня помещается в строке меню:
Затем в объект меню добавляются пункты, разделители и подменю:
Рис.1. Меню и подменю
Разделители показаны на рис.1. Они отображаются под пунктами Paste(Вставка) и Rad-only(Только для чтения).
Когда пользователь выбирает меню, генерируются события. Следовательно, для каждого пункта меню надо определить обработчик:
Существует удобный метод JMenu.add(String), позволяющий добавлять новый пункт в конец меню, например, следующим образом:
Этот метод возвращает созданный пункт, для которого можно легко задать обработчик:
Довольно часто пункты меню связываются с командами, которые могут активировать другие элементы пользовательского интерфейса, например, кнопки. В ранних статьях говорилось о том, как задаются команды с помощью объектов Action. Следует определить класс, реализующий интерфейс Action. Обычно для этого класс расширяет AbstractAction. Затем в конструкторе AbstractAction указывается метка пункта меню и переопределяется метод actionPerformed(), что позволяет реализовать обработку события, связанного с данным пунктом. Например:
JMenuBar, JMenu, JToolBar
Компонент меню JMenu библиотеки Swing позволяет создать набор элементов (пунктов меню) и представить их в интерфейсе окна. Элемент меню представляет собой кнопку, унаследованную от класса AbstractButton и отличающуюся от кнопок, флажков и переключателей только внешним видом и небольшими размерами, позволяющими им находится в JMenu. Соответствие элементов управления и элементов меню представлен в следующей таблице.
Элементы управления | Элементы меню |
---|---|
Кнопка JButton | элемент-меню JMenuItem |
Переключатель JRadioButton | элемент-переключатель JRadioButtonMenuItem |
Флажок JCheckBox | элемент-флажок JCheckBoxMenuItem |
В меню нет эквивалента выключателя JToggleButton. С его функциями справляются флажки и переключатели
Рассмотрим пример создания простейшего системного меню. Исходный код примера :
В примере создается относительно простое меню, элементами которого являются фактически кнопки, собранные в список. Списки элементов меню, или правильнее выпадающие меню (drop-down menus), реализованы в Swing классом JMenu. Интерфейс примера с открытым меню представлен на следующих двух скриншотах.
Выпадающие меню JMenu создаются методами createFileMenu() и createViewMenu(), в которых методом add() добавляются разнообразные элементы меню, в том числе элементы-флажки и элементы-переключатели.
Выпадающие списки меню размещаются в строке меню класса JMenuBar, содержащей метод add() для добавления выпадающих меню JMenu. Для размещения строки меню в интерфейсе окна вызывается метод setJMenuBar().
Элементы меню могут иметь названия, значки и мнемоники; они могут быть созданы на основе интерфейса AbstractAction. Все это представлено в примере.
Строка меню JMenuBar
Строка меню JMenuBar представляет обыкновенный контейнер, ничем не отличающийся от панели JPanel и обладающий теми же самыми свойствами. JMenuBar может быть использована не только для работы с выпадающими меню. В строку меню можно добавлять всевозможные компоненты, например надписи со значками или раскрывающиеся списки. В качестве менеджера расположения JMenuBar использует BoxLayout с расположением компонентов по горизонтали.
В следующем примере в JMenuBar размещаем выподающее меню и метку с надписью.
В примере создается простое выпадающее меню, после чего в JMenuBar помещается надпись с иконкой. Интерфейс приложения с открытыми пунктами меню представлен на следующих двух скриншотах.
В примере для создания элементов пунктом меню «Файл» и «Редактирования» используется метод createMenuItems, которому в качестве параметров передается многомерный массив строк с описанием пунктов меню. Данный метод создает элемент меню с «мнемоникой» и «акселератором». При необходимости можно устанавливать в элемент меню изображение в виде иконки. Метод createSubmenus() создает выпадающее меню с вложенными подпунктами.
Размещение строки меню в интерфейсе окна осуществляется с помощью специального метода setJMenuBar(). Метод этот принадлежит корневой панели JRootPane, которая обеспечивает, чтобы строка меню занимала подобающее ей положение на вершине окна, оставляя все оставшееся пространство в панели содержимого разработчику.
В меню элементы можно группировать с использованием специального метода addSeparator(). Кроме того, разделители можно применять и вне меню в качестве разделительных линий, в том числе вертикальных.
Загрузчик меню
В представленных примерах код формирования меню «раздувает» тело основной программы. А если принять во внимание, что это не последняя Swing-программа, то целесообразно разработать загрузчик меню «на все случаи жизни», или стремиться к этому. Также было бы неплохо и описание меню вынести из основного кода.
Далее будет описана программа, которая включает отдельный загрузчик XML-файла и создателя меню из XML-контента.
Загрузчик XML-файла XMLReader.java
В загрузчик XML-файла включены только самые необходимые конструкторы и методы, которые используются в в загрузчике меню. Особо хочется отметить, что в конструкторы включен параметр, определяющий кодировку XML-файла «charset».
XML-файл описания меню menu.xml
Файл описания меню может включать наименования в кириллице, поскольку загрузчик файла учитывает кодировку. XML-файл описания меню можно представить в следующем виде:
Корневым узлом описания меню является элемент с названием «menubar», описывающий строку меню, в которой размещаются все выпадающие меню и его элементы. Все теги описания меню имеют атрибут «name» (имя). По имени будет выполняться поиск элемента. Чтобы при поиске элементов меню не возникало ошибок, имена всех элементов должны быть уникальными.
К строке меню «menubar» присоединяются выпадающие меню : для XML-контента это означает наличие элементов-потомков с названием «menu». Как правило, для выпадающих меню настраиваются два свойства: text (текст меню) и mnemonic (символ мнемоники). Данные свойства будут задаваться в виде атрибутов элемента «menu».
Для организации сложной иерархической системы меню необходимо, чтобы дочерние элементы тега «menu» были элементами типа «menuitem» (пункт меню) или «menu» (ветка меню). Тег «menuitem» определяет элемент меню, по нажатию на который должна быть выполнена команда. А дочерний тег «menu» позволяет создать в выпадающем меню раскрывающуюся ветку меню.
Тег «menuitem» соддержит больше всего атрибутов : для него можно задавать не только текст меню и символ мнемоники, но и сочетание клавиш быстрого доступа (accelerator), а также его доступность для отображения в системном меню (enabled). В качестве особых элементов меню выступают разделители меню «separator», позволяющие организовывать группы элементов.
Пример анализатора XML-контента
Анализатор XML-контента наследует все свойства DefaultHandler и формирует хранилище меню menuStorage типа Map.
Пример тестирования загрузчика меню
В модуле тестирования загрузчика создается объект XMLReader для чтения файла меню с кодировкой UTF-8. После этого о пределяется объект создателя меню XMLMenuCreater с передачей конструктору в качестве параметра источника XML-файла. XMLMenuCreater выполняет разложение XML-содержимого (метод parse) с созданием меню и подключением JMenuBar к интерфейсу. В заключение к создателю меню подключается слушатель (addActionListener), который позволяет завершить работу программы, выбрав соответствующий пункт меню.
Интерфейс работы программы представлен на следующем скриншоте.
Примечание : исходный код формирователя меню XMLMenuCreater на странице сайта не приводится, но он включен в архив всех примеров, рассмотренных на странице.
Панели инструментов, JToolBar
Панели инструментов предназначены для размещение в интерфейсе, как правило, набора кнопок особого вида: без надписей, но с подсказками и с небольшими изображениями. Нажатием на такую кнопку инициируется выполнение команд приложения. В панелях инструментов размещаются кнопки с наиболее востребованными пользователями командами.
В библиотеке Swing панели инструментов представлены компонентом JToolBar. Этот компонент позволяет создавать любые панели инструментов, способные серьезно приукрасить и создать интуитивно понятный пользовательский интерфейс.
Основные свойства панели инструментов JToolBar
Панель инструментов JToolBar — это самый обыкновенный компонент библиотеки Swing и его можно добавлять в любые панели с любым подходящим менеджером расположения. Таким образом, можно легко конструировать панели инструментов произвольной сложности, динамически добавлять и удалять их, составляя набор панелей из любого их количества.
В следующем примере создадим три панели инструментов и расположим их вместе так, чтобы две неперемещаемые панели располагались сверху, а под ними будет размещаться перемещаемая JToolBar.
Сами панели инструментов несложны и не требуют особых комментариев : они состоят из настроенных команд Action, кнопок JButton, а также дополнительных компонентов. В панели разместили раскрывающийся список JComboBox. Следует обратить внимание на то, что после добавления во вторую панель инструментов раскрывающегося списка был добавлен заполнитель (glue).
Интерфейс формы примера представлен на следующем скриншоте :
Для добавления разделителя используется специальный метод addSeparator(). Размеры разделителя можно изменить. Для этого следует перегруженному методу addSeparator() передать объект Dimension, определяющий размеры разделителя. Используется разделитель в панели инструментов примерно так же, как в меню: для визуального отделения групп компонентов, выполняющих различные действия.
Кнопки в панель инструментов можно добавлять в виде компонента JButton с использованием метода метода add(), а также как экземпляр команды Action с использованием специального перегруженного метода add(). Использование в качестве параметра команды Action во многих случаях очень удобно, поскольку позволяет совмещать в одном месте настройку внешнего вида элемента управления и описание действия, которое он выполняет. Это особенно верно для панелей инструментов: в классе команды задается значок, текст подсказки и описывается действие, которое должна будет выполнить команда. После этого остается только добавить команду в панель инструментов. Если же необходимо будет модифицировать команду, будь то внешний вид или действие, то это все скрыто в одном классе.
Следует обратить внимание на специальную полосу с левого края нижней перемещаемой панели инструментов. Это так называемые вешки перемещения : с их помощью можно перетаскивать (drag and drop) панель инструментов и «причаливать» (drag and dock) к разным края окна, или же оставлять «плавающими». Перетаскивать панели инструментов и причаливать их к краям окна можно, только если в нем используется расположение BorderLayout. Отсюда следует нехитрый совет: если в вашем окне есть панели инструментов и вы хотите дать пользователю возможность их перетаскивать к другим краям окна, применяйте менеджер расположения BorderLayout, в противном случае пользователь может быть весьма озадачен тем, что панели инструментов оказываются совсем не там, куда он их перетаскивает.
Панели инструментов следует располагать так, чтобы их было удобно добавлять, удалять или перемещать. Первые две панели инструментов были расположены в панели с горизонтальным блочным расположением с разделением их распоркой размером 5 пикселов.
Скачать примеры
Исходные коды примеров, рассмотренных на странице, можно скачать здесь (12.5 Кб).
Изучаем Java
Вы здесь: Главная >> Java-самоучитель >> Создание меню с помощью пакета java
Создание меню с помощью пакета java
Рассмотрим создание меню с помощью пакета java. awt. Для создания панели меню существует класс MenuBar. На эту панель помещается одно ИЛИ несколько вложенных меню (класс Menu). Команды (элементы) меню могут быть такими: простой элемент меню (класс MenuItem) или флажок/переключатель (класс CheckboxMenuItem). В пакете javax. swing аналогичное меню. За построение панели отвечает класс JMenuBar, за вложенное меню— JMenu, за команды меню— JMenuItem, JCheckboxMenuItem и JRadioButtonMenuItem. Рассмотрим создание меню на примере.
1. Создайте приложение, как в первом разделе этой главы, только задайте имя программы «Menu», а заголовок — «MyMenu».
2. Рассмотрим создание меню из пакета javax. swing (в принципе меню обоих пакетов похожи). Перейдите в окно дизайнера и добавьте в форму компонент, расположенный в секции Swing Containers и обладающий всплывающей подсказкой javax.swing. JMenuBar. Таким образом, мы добавили панель меню, и в окне структуры у раздела Menu появился значок jMenuBarl. Теперь в окне структуры щелкните на объекте this и выберите значением свойства JMenuBar jMenuBarl.
3. Теперь щелкните два раза на значке jMenuBarl. Появится два прямоугольника — один располагается сверху, на линейке меню, другой ниже. Щелкните дважды на верхнем квадратике и введите First. Справа появится прямоугольник. Щелкните дважды на прямоугольнике, который располагается ниже квадратика First. Наберите слово Print. Щелкните дважды на правом квадратике и наберите слово Second. На прямоугольнике, расположенном ниже его, наберите Hello. Теперь щелкните на нем правой кнопкой мыши и выберите Checkable/Uncheckable Item. Около квадратика появится галочка. Вновь щелкните на нем и измените свойство selected на True. Что это все такое?
Прямоугольники, расположенные на линейке меню, — это компоненты JMenu. Все прямоугольники внизу— подчиненные элементы. По умолчанию это простые команды JMenuItem, однако с помощью правой кнопки мыши можно установить подчиненный компонент JMenu, который тоже будет содержать элементы (таким образом мы можем создать подменю).
Можно сделать простую команду компонентом JCheckboxMenuItem (так мы поступили с элементом Hello) или JRadioButtonMenuItem. Можно создать разделитель — Separator. Как обычно, Swing-компоненты имеют больше возможностей, чем компоненты из пакета java.awt. Тут можно устанавливать пиктограммы, всплывающие подсказки и др.
4. Теперь щелкните на элементе Print. Щелкните дважды на значении его метода асtionPerformed (выполняется при загрузке этого элемента, т.е. щелчке на нем).
В открывшемся окне введите следующие команды.
public void jMenuIteml_actionPerformed(ActionEvent e)
< if (jCheckBoxMenuIteml.getState())
this.setTitle(«Print Hello»);
else
this.setTitle(» Print»);
>
Теперь запустите программу и поэкспериментируйте с ней. Один из возможных вариантов ее выполнения показан на рис. 8.6.
Рис. 8.6. Выполнение программы из примера создания Menu
Работа с компонентами для создания меню из пакета java. awt аналогична работе с компонентами из пакета javax. swing, однако у первых меньше свойств.
Теперь добавим меню к нашей программе для магазина, выполнив следующие действия.
1. Загрузите проект.
2. Добавьте в проект компонент JMenuBar. Установите для объекта this свойство JMenuBar в значение jMenuBarl. Разработайте меню по принципу, представленному в листинге 8.3.
Commands — класс JMenu
Buy — класс JMenuItem Goods — класс JMenu
• Potatoes — класс JCheckboxMenuItem
• Carrots — класс JCheckboxMenuItem
• Tomatoes — класс JCheckboxMenuItem
• Cucumbers — класс JCheckboxMenuItem
• Radishes — класс JCheckboxMenuItem
• Red currants — класс JCheckboxMenuItem
• Black Currants — класс JCheckboxMenuItem
• Raspberries — класс JCheckboxMenuItem
• Strawberries — класс JCheckboxMenuItem
• Mango — класс JCheckboxMenuItem
• Pepsi-Cola — класс JRadioButtonMenuItem (свойство Selected: True)
• Coca-Cola — класс JRadioButtonMenuItem (свойство Selected: False)
• Fanta — класс JRadioButtonMenuItem (свойство Selected: False)
• 7UP — класс JRadioButtonMenuItem (свойство Selected: False)
• Mountain Dew — класс JRadioButtonMenuItem (свойство Selected: False)
• STIMOROL PRO-Z — класс JRadioButtonMenuItem (свойство Selected: True)
• DIROL — класс JRadioButtonMenuItem (свойство Selected: False)
• ORBIT — класс JRadioButtonMenuItem (свойство Selected: False)
3. Пощелкайте на всех флажках и переключателях и наберите в открывшемся текстовом окне код, представленный в листинге 8.4.
Листинг 8.4.
Определение методов обработки событий
4. Теперь нужно у каждой команды меню вызвать свой обработчик события, в котором будет описано, что происходит при щелчке на ней. Заполните обработчики кодом, представленным в листинге 8.5.
Не забывайте, что для создания обработчика необходимо пощелкать на обработчике события actionPerf ormed на вкладке Events.
Листинг 8.5.
Текст обработчиков событий
5. Создайте теперь акселератор (горячую клавишу) для команды Buy (или Account). Для этого выберите команду Buy в меню в окне структуры (jMenuIteml) и щелкните на кнопке с многоточием около имени свойства Accelerator. Установите в раскрывшемся окне Accelerator все параметры так, как показано на рис. 8.7.
Рис. 8.7. Определение акселератора для команды меню
6. Далее щелкните на кнопке ОК и запустите программу. Результат ее может быть таким как на рисунке 8.8.
Рис. 8.8. Результат выполнения листинга 8.5
Сергей Владимирцев
03.03.2011
Простое консольное меню на операторе switch
Разработайте приложение, которое при старте, при оператора switch
выводит в консоли текстовое меню для выполнения пользователем
нижеперечисленных операций.
1. Создание массива из всех нечётных чисел от 1 до 99, выведение его на
экран в строку.
2. Создание массива из 20-ти первых чисел Фибоначчи и выведение его на
экран.
Напоминаем, что первый и второй члены последовательности равны
единицам, а каждый следующий — сумме двух предыдущих.
3. Создание двумерного массива из 8 строк по 5 столбцов в каждой из
случайных целых чисел из отрезка [10;99]+. Вывести массив на экран.
Структура меню:
«1. Для создания массива из нечетных числе нажмите 1».
«2. Для создания массива из чисел Фибоначчи нажмите 2»
«3. Для создания двумерного массива нажмите 3»
«4. Для выхода из приложения нажмите 4.»
После выполнения выбранной операции, на экран должен выводиться
результат и снова пользователю предлагается выполнить одну из операций
до тех пор, пока пользователь выполнить выход из приложения.
задания так я могу сделать вывести массивы и т.д. только не могу сообразить как это делать через switch, как выводить через меню и нажатием клавиш. Я не давно начал изучать Java и вот такое задание на курсах дали. толком ничего не объяснили одно занятие всего было
Возврат обратно в меню, в операторе switch
Я написал программу, которая выводит на экран меню блюд, при нажатии клавишы выводится название.
Условие в операторе switch
как записать условие х-у>0 с помощью case