java меню в консоли
Простое консольное меню на операторе 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
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 Кб).
Console application menu
Sometimes I need to write a simple Java console applications and menu look:
2 Answers 2
First of all, there are at least three buggy things:
select variable is declared inside the do. while loop, so the condition in while is checked against another one (probably, a field in the class?). So, the loop won’t work as expected!
copy-paste is evil. The calls fileHolder.create(«image»); are repeated in two different conditionals. The «txt» option is not used. Please pay more attention to the things you write and do not copy-paste such elementary things.
the Scanner is not closed after its usage, which is desirable, as for any other items that use I/O.
Of course, the whole story may be refactored with patterns usage. But I don’t think that the state pattern suits well here. It’d be better refactored with the command pattern.
All the menu actions (create, remove, rename and their dependent ones) may be wrapped into separate objects, which associate the expected keys (1,2,3..), the text and other necessary stuff and sugar.
For example, a (very short) version of Menu class could be like this:
And it would be initialized and used:
But for this very concrete and short example of code I would consider decomposing it into patterns as a sort of overkill.
There is some job to do about the original straightforward approach, so let’s just try to improve it.
The input numbers are read several times using the Scanner object. They should also be validated, so a dedicated method would be very useful:
The frame for the main logic would look like this:
Java. Swing. Панель инструментов. Меню
Панель инструментов
Панель JToolBar используется для размещения в строку или столбец компонент,
определяющих наиболее используемые действия. В качестве компонент обычно используются кнопки с картинками.
По умолчанию панель подвижна, т.е. пользователь может перемещать ее за край.
На этот случай реализовано автоматическое встраивание панели в контейнер с компоновщиком BorderLayout. Так в следующем примере, перемещая панель к краям окна, ее контур будет менять направление выравнивания.
И если при этом отпустить кнопку мыши, панель встанет на это место. Если же отпустить в центре окна, панель будет отображаться в собственном окне (ее можно обратно встроить).
Плавающий разделитель
Контейнер JSplitPane позволяет держать два компонента разделенных специальным разделителем, с помощью которого пользователь может изменять их размер (но не меньше установленного минимального размера). Расположить компоненты можно по вертикали или горизонтали. Методом setResizeWeight можно указать в какой пропорции изменять размеры компонент при изменении размеров самого контейнера.
Если нужно несколько разделителей то их вкладывают один в другой, или можно воспользоваться другими классами как MultiSplitPane.
Для реализации меню используются следующие классы:
Элемент меню JMenuItem создан на основе кнопки, соответственно и обработка событий
такая же:
обработка простых элементов меню реализуется через интерфейс ActionListener,
а обработка флажков и радио элементов обычно через интерфейс ItemListener.
Ниже приведен пример окна с панелью меню. При выборе элемента меню в консоль выводится его имя. На один из элементов меню назначена быстрая клавиша ALT+E.
Блог только про Java
Учимся программировать на Java с нуля
Как создать меню в интерфейсе Java
Создать меню в Java достаточно просто. Недавно мы с вами говорили о том как создать всплывающее меню в Java. Сначала создается строка меню.
Для каждого меню создается свой объект:
Меню верхнего уровня помещается в строке меню:
Затем в объект меню добавляются пункты, разделители и подменю:
Рис.1. Меню и подменю
Разделители показаны на рис.1. Они отображаются под пунктами Paste(Вставка) и Rad-only(Только для чтения).
Когда пользователь выбирает меню, генерируются события. Следовательно, для каждого пункта меню надо определить обработчик:
Существует удобный метод JMenu.add(String), позволяющий добавлять новый пункт в конец меню, например, следующим образом:
Этот метод возвращает созданный пункт, для которого можно легко задать обработчик:
Довольно часто пункты меню связываются с командами, которые могут активировать другие элементы пользовательского интерфейса, например, кнопки. В ранних статьях говорилось о том, как задаются команды с помощью объектов Action. Следует определить класс, реализующий интерфейс Action. Обычно для этого класс расширяет AbstractAction. Затем в конструкторе AbstractAction указывается метка пункта меню и переопределяется метод actionPerformed(), что позволяет реализовать обработку события, связанного с данным пунктом. Например: