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

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

Динамическое построение событий

Читайте также:
  1. Актуальность может быть определена как значимость, важность, приоритетность среди других тем и событий, злободневность и т.д.
  2. Глава 7. Построение стратегии
  3. Даты важнейших событий истории мировой экономики
  4. Динамическое программирование. Принцип Беллмана. Основное рекуррентное соотношение Беллмана. Общие принципы решения задач динамического программирования.
  5. ДИСПАНСЕРНОЕ ДИНАМИЧЕСКОЕ НАБЛЮДЕНИЕ
  6. Добавление обработчиков событий для кнопок
  7. Завершение ввиду будущих событий
  8. Задание 1. Построение диаграмм.
  9. Захват событий

Одна из выгод модели событий Swing заключена в гибкости. Вы можете добавлять и удалять обработку события одним вызовом метода. Следующий пример демонстрирует это:

//: c13:DynamicEvents.java// Вы можете динамически изменить проявление события.// Также показывается различные акции для события.// <applet code=DynamicEvents// width=250 height=400></applet>import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;import com.bruceeckel.swing.*; public class DynamicEvents extends JApplet { ArrayList v = new ArrayList(); int i = 0; JButton b1 = new JButton("Button1"), b2 = new JButton("Button2"); JTextArea txt = new JTextArea(); class B implements ActionListener { public void actionPerformed(ActionEvent e) { txt.append("A button was pressed\n"); } } class CountListener implements ActionListener { int index; public CountListener(int i) { index = i; } public void actionPerformed(ActionEvent e) { txt.append("Counted Listener "+index+"\n"); } } class B1 implements ActionListener { public void actionPerformed(ActionEvent e) { txt.append("Button 1 pressed\n"); ActionListener a = new CountListener(i++); v.add(a); b2.addActionListener(a); } } class B2 implements ActionListener { public void actionPerformed(ActionEvent e) { txt.append("Button2 pressed\n"); int end = v.size() - 1; if(end >= 0) { b2.removeActionListener((ActionListener)v.get(end)); v.remove(end); } } } public void init() { Container cp = getContentPane(); b1.addActionListener(new B()); b1.addActionListener(new B1()); b2.addActionListener(new B()); b2.addActionListener(new B2()); JPanel p = new JPanel(); p.add(b1); p.add(b2); cp.add(BorderLayout.NORTH, p); cp.add(new JScrollPane(txt)); } public static void main(String[] args) { Console.run(new DynamicEvents(), 250, 400); }} ///:~

Новшества этого примера в том, что:

  1. Есть более одного слушателя, прикрепленного в каждой Button. Обычно компоненты обрабатывают события как групповые (multicast), в том смысле, что вы можете зарегистрировать много слушателей для единственного события. В специальных компонента, в которых события обрабатываются индивидуально (unicast), вы получите TooManyListenersException.
  2. Во время выполнения программы слушатели динамически добавляются и удаляются из Button b2. Добавление происходит тем же способом, который вы видели ранее, но каждый компонент имеет также метод removeXXXListener() для удаления слушателя каждого типа.

Гибкость такого рода обеспечивает большую мощь вашему программированию.

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




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

Группы кнопок | Текстовые поля | Панели скроллирования | Радио кнопки | Окна сообщений | Всплывающие меню | Окна диалогов | Файловые диалоги | Деревья | Таблицы |


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