Материал: Портянкин И. Swing

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

260 ГЛАВА 9

for (String name : names) {

JCheckBox check = new JCheckBox(name); panel.add(check);

}

// добавляем все в контейнер add(ch);

add(panel);

// выводим окно на экран pack(); setVisible(true);

}

public static void main(String[] args) { SwingUtilities.invokeLater(

new Runnable() {

public void run() { new Checkboxes(); } });

}

}

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

Дополнительные значки

Как вы помните, кнопки Swing позволяют практически полностью поменять свой внешний вид и настроить его под свой вкус. Мы подробно рассмотрели все свойства, связанные с этим, еще в самом первом примере этой главы. Однако, теперь, когда мы изучили и кнопки с двумя состояниями, возникает вопрос, как кнопки, если мы меняем их внешний вид и применяем значки, будут показывать выбранное состояние, к примеру, те же флажки? Есть ли возможность повлиять и на это? Конечно, есть, и управляется это еще одним свойством с названием selectedIcon. Используя его, вы можете задать значок, который будет рисоваться на экране в том случае, если элемент выбран, вместо флажка или переключателя. Ну а когда элемент не выбран, рисуется стандартный значок, который задается уже знакомым нам свойством icon.

Элементы управления

261

Возможность на лету и с легкостью перестроить внешний вид компонентов Swing иногда захватывает, но все же следует пользоваться ей с осторожностью. В противном случае есть риск сделать код программы «грязноватым», слишком сильно перемешав настройку внешнего вида с деловой логикой. К тому же не стоит забывать о подключаемом внешнем виде и UI-представителях. Написать их не так уж и трудно, а результатом будет полное отделение логики программы от внешнего вида и поведения. Случай, когда внешний вид ваших компонентов основан на изображениях и значках, особенно хорошо сочетается с настраиваемым внешним видом Synth, стандартным для Swing и JDK.

Резюме

Благодаря элементам управления пользователь может немедленно изменить ход выполнения программы или что -либо выбрать. Позвольте ему это сделать: возможностей элементов управления Swing вам должно хватить на все случаи жизни.

Глава 10. Меню и панели инструментов

Система меню — важнейший элемент пользовательского интерфейса современных приложений. Именно в меню находится полный перечень команд приложения, который к тому же организован и разбит на группы. Благодаря этому ознакомление с возможностями приложения проходит быстрее, и начать работу, имея под рукой хорошо организованную и интуитивно понятную систему команд, гораздо проще. Так что можно смело утверждать, что процесс создания меню является одним из главных этапов на пути разработки хорошего приложения. Меню — это «лицо вашего приложения», и именно по нему пользователь составит первое впечатление о возможностях и качестве приложения.

К «авангарду» пользовательского интерфейса вашего приложения относятся и панели инструментов. Панель инструментов представляет собой компактный набор компонентов, чаще всего кнопок (хотя в ней могут содержаться любые компоненты), которые отвечают за наиболее важные и часто используемые функции вашего приложения. Панель инструментов позволяет пользователю совершать нужные действия гораздо быстрее, так что эффективность его работы с вашим приложением повышается, а это первейший фактор при создании пользовательских интерфейсов. Продуманные удобные панели инструментов наряду с удобной системой меню способны мгновенно сказать пользователю все о высоком качестве вашего приложения.

Меню

Хотя материал, посвященный меню, находится в отдельной главе, он вполне мог бы располагаться в главе 9, описывающей элементы управления. И это совсем не случайно. Ведь меню — это не что иное, как несколько кнопок, собранных в список и при необходимости вызываемых на экран. Данный факт не укрылся от разработчиков библиотеки Swing, и в результате элементы меню действительно оказались кнопками, унаследованными от хорошо знакомого нам класса AbstractButton, они отличаются от кнопок, флажков и переключателей только внешним видом да небольшими изменениями, позволяющими им находиться в меню. Поэтому, несмотря на то, что классы элементов меню имеют другие названия, никто не отнимет у вас знаний, полученных в предыдущих главах, — вы уже знаете, как изменять внешний вид элементов меню, назначать им мнемоники и обрабатывать события (хотя мы еще не видели ни одного примера). Чтобы ускорить процесс знакомства с системой меню библиотеки Swing, рассмотрим своеобразную таблицу соответствия уже рассмотренных нами элементов управления и элементов меню (табл. 10.1).

Таблица 10.1. Соответствие элементов управления и элементов меню

Элементы управления

Элементы меню

 

 

Кнопка JButton

«Обычный» элемент меню JMenuItem

Переключатель JRadioButton

Элемент-переключатель JRadioButtonMenuItem

Флажок JCheckBox

Элемент-флажок JCheckBoxMenuItem

 

 

Меню и панели инструментов

263

Все, что рассказывалось относительно элементов управления, справедливо и для элементов меню. Вы можете заметить, что в системе меню нет эквивалента выключателя JToggleButton, и это не удивительно. При навигации по системе меню выбранный элемент меню становится «вжатым», а для выключателя такое поведение приведет к неоднозначному восприятию его состояния (в принципе, выключатель в меню и не нужен — с его функциями справляются флажки и переключатели).

Создание системы меню

Давайте рассмотрим пример, который разъяснит, как создается простейшая система меню, как она появляется на экране, и что для этого нужно сделать:

//MenuSystem.java

//Создание системы меню в Swing import javax.swing.*;

import java.awt.event.ActionEvent; import java.awt.*;

public class MenuSystem extends JFrame { public MenuSystem() {

super("MenuSystem"); setDefaultCloseOperation( EXIT_ON_CLOSE );

//создаем строку главного меню

JMenuBar menuBar = new JMenuBar();

//добавляем в нее выпадающие меню menuBar.add(createFileMenu()); menuBar.add(createWhoMenu());

//и устанавливаем ее в качестве

//меню нашего окна setJMenuBar(menuBar);

//выводим окно на экран setSize(300, 200); setVisible(true);

}

// создает меню "Файл"

private JMenu createFileMenu() {

//создадим выпадающее меню, которое будет

//содержать обычные пункты меню

JMenu file = new JMenu("Файл");

//пункт меню (со значком) JMenuItem open =

new JMenuItem("Открыть",

new ImageIcon("images/open16.gif"));

//пункт меню из команды

264

ГЛАВА 10

JMenuItem exit = new JMenuItem(new ExitAction());

//добавим все в меню

file.add(open);

//разделитель

file.addSeparator(); file.add(exit); return file;

}

// создадим забавное меню private JMenu createWhoMenu() {

// создадим выпадающее меню

JMenu who = new JMenu("Кто ВЫ ?");

//меню-флажки

JCheckBoxMenuItem clever =

new JCheckBoxMenuItem("Умный"); JCheckBoxMenuItem smart =

new JCheckBoxMenuItem("Красивый"); JCheckBoxMenuItem tender =

new JCheckBoxMenuItem("Нежный");

//меню-переключатели

JRadioButtonMenuItem male =

new JRadioButtonMenuItem("Мужчина"); JRadioButtonMenuItem female =

new JRadioButtonMenuItem("Женщина");

//организуем переключатели в логическую группу

ButtonGroup bg = new ButtonGroup(); bg.add(male); bg.add(female);

//добавим все в меню

who.add(clever);

who.add(smart);

who.add(tender);

// разделитель можно создать и явно who.add( new JSeparator()); who.add(male);

who.add(female); return who;

}

// команда выхода из приложения

class ExitAction extends AbstractAction { ExitAction() {

putValue(NAME, "Выход");

Источник: https://studfile.net/preview/15935977/