Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Пример 2.15.

Читайте также:
  1. V. Примерный образец теста, применяемого для промежуточной аттестации
  2. Web-контейнер, Servlet, JSP. Структура, назначение и пример сервлета или JSP.
  3. А вот чрезмерное употребление алкоголя действительно вызывает гинекомастию. Примерно четверо из 10 хронических алкоголиков имеют это заболевание в той или иной стадии развития.
  4. А. Здравомыслов.Примерно два года тому назад.
  5. Ая основа – Хаджури не видит разницы между нововведенцем, призывающим к своему нововведению, и не призывающим, и пример в этом он взял с Махмуда Хаддада.
  6. Будьте хорошим примером для своих детей
  7. Быть примером
  8. В наших примерах мы ни разу не рассматривали конструкторы классов, поэтому при создании экземпляров наших классов вызывался конструктор класса object.
  9. В приведенном примере нарушение синтезов пространственного гнозиса и обусловливает ряд следствий, что можно представить схематично.
  10. В только что приведенном вами примере с под­брасыванием монеты компьютерное моделирование

 

package ItemChooser.java;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.border.*;import java.util.*; /** * Этот класс Swing предоставляет пользователю возможность выбора. * Выбор осуществляется компонентами JList, JComboBox и * JRadioButton. Имя варианта выбора отображается * при помощи компонента JLabel. * Множественный выбор не поддерживается. **/public class ItemChooser extends JPanel { // Задаем значения свойств компонента String name; // Название списка вариантов String[] labels; // Текст для вариантов выбора Object[] values; // Произвольные значения для каждого варианта int selection; // сделанный выбор int presentation; // Способ представления выбора // Это допустимые значения свойства presentation public static final int LIST = 1; public static final int COMBOBOX = 2; public static final int RADIOBUTTONS = 3; // Эти компоненты используются для 3 допустимых типов представления JList list; // первый тип JComboBox combobox; // второй тьип JRadioButton[] radiobuttons; // третий тип // Список объектов, интересующихся их состоянием ArrayList listeners = new ArrayList(); // Конструктор, устанавливающий эти значения public ItemChooser(String name, String[] labels, Object[] values, int defaultSelection, int presentation) { // Копируем аргументы конструктора в поля объекта this.name = name; this.labels = labels; this.values = values; this.selection = defaultSelection; this.presentation = presentation; // Если значения не предоставлены, то вместо них принимаем метки if (values == null) this.values = labels; // Создаем обработчики событий для каждого типа switch(presentation) { case LIST: initList(); break; case COMBOBOX: initComboBox(); break; case RADIOBUTTONS: initRadioButtons(); break; } } // Инициализация для JList void initList() { list = new JList(labels); // Создаем список list.setSelectedIndex(selection); // Устанавливаем начальное состояние // Обрабатываем изменения состояния list.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { ItemChooser.this.select(list.getSelectedIndex()); } }); // Располагаем имена меток в списке по вертикалиthis.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); // вертикально this.add(new JLabel(name)); // отображаем имя выбора this.add(new JScrollPane(list)); // Добавляем JList } // Инициализация для JComboBox void initComboBox() {combobox = new JComboBox(labels); // Создаем раскрывающийся список combobox.setSelectedIndex(selection); // Начальное состояние // Обрабатываем изменения состояния combobox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { ItemChooser.this.select(combobox.getSelectedIndex()); } }); // Располагаем раскрывающийся список и надпись горизонтально this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); this.add(new JLabel(name)); this.add(combobox); } // Инициализация JRadioButton void initRadioButtons() { // Создаем массив переключателей radiobuttons = new JRadioButton[labels.length]; // массив ButtonGroup radioButtonGroup = new ButtonGroup(); // только 1 ChangeListener listener = new ChangeListener() { // Общий слушатель public void stateChanged(ChangeEvent e) { JRadioButton b = (JRadioButton)e.getSource(); if (b.isSelected()) { // если произошло событие, то проверяем в цикле // переключатели для определения индекса for(int i = 0; i < radiobuttons.length; i++) { if (radiobuttons[i] == b) { ItemChooser.this.select(i); return; } } } } }; // Отображаем имя выбора на рамке переключателя this.setBorder(new TitledBorder(new EtchedBorder(), name)); this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); // Создаем переключатели, помещаем их в группу и задаем // каждому из них слушатель. for(int i = 0; i < labels.length; i++) { radiobuttons[i] = new JRadioButton(labels[i]); if (i == selection) radiobuttons[i].setSelected(true); radiobuttons[i].addChangeListener(listener); radioButtonGroup.add(radiobuttons[i]); this.add(radiobuttons[i]); } } // Эти простые методы возвращают значения свойств // Эти свойства – только для чтения. Они устанавливаются // конструктором и не могут меняться. public String getName() { return name; } public int getPresentation() { return presentation; } public String[] getLabels() { return labels; } public Object[] getValues() { return values; } /** Возвращаем индекс выбранного элемента */ public int getSelectedIndex() { return selection; } /** Возвращаем объект, связанный с выбранным элементом */ public Object getSelectedValue() { return values[selection]; } /** * Устанавливаем выбранный элемент по заданному индексу. * Этот метод изменяет экранный вывод, но не генерирует событий. **/ public void setSelectedIndex(int selection) { switch(presentation) { case LIST: list.setSelectedIndex(selection); break; case COMBOBOX: combobox.setSelectedIndex(selection); break; case RADIOBUTTONS: radiobuttons[selection].setSelected(true); break; } this.selection = selection; } /** * Этот внутренний метод вызывается при изменении выбора. * Он сохраняет новый индекс выбора и генерирует события для * всех зарегистрированных слушателей JList, JComboBox и JRadioButtons, * которые вызывают этот метод. **/ protected void select(int selection) { this.selection = selection; // сохраняем выбранный индекс if (!listeners.isEmpty()) { // Если зарегистрированы слушатели, // создаем объект события, описывающий выбор ItemChooser.Event e = new ItemChooser.Event(this, selection, values[selection]); // Обходим слушатели в цикле, используя Iterator for(Iterator i = listeners.iterator(); i.hasNext();) { ItemChooser.Listener l = (ItemChooser.Listener)i.next(); l.itemChosen(e); // Уведомляем слушатель о выборе } } } // Эти методы предназначены для регистрации и удаления слушателей public void addItemChooserListener(ItemChooser.Listener l) { listeners.add(l); } public void removeItemChooserListener(ItemChooser.Listener l) { listeners.remove(l); } /** * Этот внутренний класс определяет тип события, генерируемого * объектами ItemChooser. Имя внутреннего класса Event, а его полное имя * ItemChooser.Event **/ public static class Event extends java.util.EventObject { int selectedIndex; // индекс выбранного элемента Object selectedValue; // связанное с ним значение public Event(ItemChooser source, int selectedIndex, Object selectedValue) { super(source); this.selectedIndex = selectedIndex; this.selectedValue = selectedValue; } public ItemChooser getItemChooser() { return (ItemChooser)getSource();} public int getSelectedIndex() { return selectedIndex; } public Object getSelectedValue() { return selectedValue; } } /** * Этот внутренний интерфейс должен быть реализован любым объектом, * желающим, чтобы его уведомили, когда выбранный элемент в * ItemChooser изменится. **/ public interface Listener extends java.util.EventListener { public void itemChosen(ItemChooser.Event e); } /** * Этот внутренний класс демонстрирует компонент ItemChooser * Он использует аргументы из командной строки как * метки и значения для ItemChooser. **/ public static class Demo { public static void main(String[] args) { // Создаем окно и готовимся к его закрытию по команде final JFrame frame = new JFrame("ItemChooser Demo"); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); // Строка сообщения для отображения результатов final JLabel msgline = new JLabel(" "); // Создаем панель с тремя компонентами ItemChooser JPanel chooserPanel = new JPanel(); final ItemChooser c1 = new ItemChooser("Choice #1", args, null, 0, ItemChooser.LIST); final ItemChooser c2 = new ItemChooser("Choice #2", args, null, 0, ItemChooser.COMBOBOX); final ItemChooser c3 = new ItemChooser("Choice #3", args, null, 0, ItemChooser.RADIOBUTTONS); // Слушатель, отображающий в строке сообщений изменения ItemChooser.Listener l = new ItemChooser.Listener() { public void itemChosen(ItemChooser.Event e) { msgline.setText(e.getItemChooser().getName() + ": " + e.getSelectedIndex() + ": " + e.getSelectedValue()); } }; c1.addItemChooserListener(l); c2.addItemChooserListener(l); c3.addItemChooserListener(l); // Вместо отслеживания изменений в ItemChooser.Listener, // приложение опрашивает текущее состояние по мере надобности. // Эта кнопка так и делает. JButton report = new JButton("Report"); report.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // Используем HTML текст в диалоговом // окне сообщений JOptionPane. String msg = "<html><i>" + c1.getName() + ": " + c1.getSelectedValue() + "<br>"+ c2.getName() + ": " + c2.getSelectedValue() + "<br>"+ c3.getName() + ": " + c3.getSelectedValue() + "</i>"; JOptionPane.showMessageDialog(frame, msg); } }); // Помещаем в панель 3 объекта ItemChooser и кнопку Button chooserPanel.add(c1); chooserPanel.add(c2); chooserPanel.add(c3); chooserPanel.add(report); // Помещаем в окно панель и строку сообщений Container contentPane = frame.getContentPane(); contentPane.add(chooserPanel, BorderLayout.CENTER); contentPane.add(msgline, BorderLayout.SOUTH); // Устанавливаем размер окна и отображаем его. frame.pack(); frame.show(); } }}

 

До сих пор мы рассматривали по отдельности различные инструменты: компоненты, контейнеры, управление компоновкой и обработку событий, теперь соберем все это вместе, добавим меню и панель инструментов, чтобы создать законченный графический интерфейс приложения. Поместим экземпляр ScribblePane2 в контейнер JFrame и добавим компоненты JMenuBar и JToolBar, позволяющие пользователю управлять приложением. Компонент JColorChooser позволяет пользователю выбрать цвет, а JOptionPane запрашивает подтверждение на выход из приложения. Этот пример использует интерфейс Action в качестве объекта ActionListener для организации реакции на событие ActionEvent, генерируемое компонентом. Он позволяет организовывать связь с объектом Action произвольного количества свойств. Объекты Action могут размещаться внутри компонентов JMenu и JToolBar для автоматического создания событий меню и кнопок панели инструментов.




Дата добавления: 2015-09-11; просмотров: 24 | Поможем написать вашу работу | Нарушение авторских прав

Практическое занятие № 2 | Практическое занятие № 3 | Практическое занятие № 4 | Практическое занятие № 5 | Практическое занятие № 6 | Практическое занятие № 7 | Пример 2.1. | Пример 2.2. | Глава 2.2. Графические интерфейсы пользователя в Java | Компоненты. |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.009 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав