Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Есть ли такой паттерн(обработка событий)? 
:(
    Опции темы
xaoc2
Дата 24.10.2004, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 22.10.2004

Репутация: нет
Всего: нет



В последнее время стало напрягать то что обработчики событий разлазятся по тексту программы, что затрудняет моделирование. Особенно в JBuilder.
Мне пришло в голову что одинаковые события надо как то группировать.
Придумал для себя такой паттерн:
Допустим есть 3 кнопки компонента(не обязательно одного типа) и на все кликаем.
Где то в теле класса:
Код
 JButton jButton1 = new JButton();
 JButton jButton2 = new JButton();
 JButton jButton3 = new JButton();
//.....................................
JTextPane jTextPane1 = new JTextPane();

   //---А это собственно патерн.-------------------------------------------
   Component[] mouseCompListener = {
                                    jButton1,
                                    jButton2,
                                    jButton3
                                   };
   for(int i=0;i<mouseCompListener.length;i++){
     mouseCompListener[i].addMouseListener(new JButton1_mouseAdapter());
   }

        //***********Внутренний класс обработчика:************
          class JButton1_mouseAdapter  extends MouseAdapter {
               public void mouseClicked(MouseEvent e) {
                 if (e.getSource() == jButton1) {
                     jTextPane1.setText("Sobytie iz knopki 1");
                 }else if (e.getSource() == jButton2) {
                   jTextPane1.setText("Sobytie iz knopki 2");
                 }else if (e.getSource() == jButton3) {
                   jTextPane1.setText("Sobytie iz knopki 3");
                 }
               }
           }
       //**************************************************
   //-------------------------------------------------------------

это удобно так как всё сосредоточено весьма компактно,
плюс, после компиляции - меньше файлов.Можно быстро зарегистриробать обработчик добавив его в массив mouseCompListener[] а в конструкцию else if код для обработки.Кода меньше.Для нескольких компонентов - один блок кода типа:
Код
else if (e.getSource() == jButtonOpenFile || e.getSource() == jMenuItemOpenFile) {
     jTextPane1.setText("Sobytie iz knopki 3");
}


Минусы: дополнительные вычисления при возникновении события.
Вопрос есть ли уже такой паттерн с более лучшей реализацией?

Это сообщение отредактировал(а) xaoc2 - 24.10.2004, 22:17
PM MAIL   Вверх
Domestic Cat
Дата 24.10.2004, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Посмотри Command паттерн в "THE DESIGN PATTERNS", James W. Cooper.


--------------------

PM   Вверх
xaoc2
Дата 25.10.2004, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 22.10.2004

Репутация: нет
Всего: нет



Спасибо.
Нашёл описание:
http://lib.juga.ru/article/view/167/
PM MAIL   Вверх
xaoc2
Дата 26.10.2004, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 22.10.2004

Репутация: нет
Всего: нет



Прочитал это самое описание, не понял как применить, начал сам думать, вроде похоже но вроде и чего-то нехватает. Теперь получилось тоже удобно, код обработки события находится(и перенаправляется) в объекте отправителе.
Короче посмотрите, явлается ли мой код паттерном "команда":
Код

//Файл AllMouseClickedAction.java
public interface AllMouseClickedAction {    
   void action();    
}

Код

//Файл AllMouseClickManager.java
import java.awt.event.*;
public class AllMouseClickManager extends MouseAdapter {
  public void mouseClicked(MouseEvent e){
     ((AllMouseClickedAction)e.getSource()).action();  
  }
}


Код

//Файл MyButton1.java
public class MyButton1 extends javax.swing.JButton implements AllMouseClickedAction{  
   public MyButton1() {
       super();
   }    
   public void action() {
       System.out.println("Событие из кнопки 1");
   }    
}


Код

//Файл MyButton2.java
public class MyButton2 extends javax.swing.JButton implements AllMouseClickedAction{
   public MyButton2() {
       super();
   }
   public void action() {
       System.out.println("Событие из кнопки 2");
   }    
}


Код

//MyButton3.java
public class MyButton3 extends javax.swing.JButton implements AllMouseClickedAction{
   public MyButton3() {
       super();
   }
   public void action() {
       System.out.println("Событие из кнопки 3");
   }    
}



Фрагмент файла с классом main()

Код
       
       MyButton1 jButton1 = new MyButton1();
       MyButton2 jButton2 = new MyButton2();
       MyButton3 jButton3 = new MyButton3();
      //---------------------------------
       Component myBytton[] = {jButton1,
                               jButton2,
                               jButton3};
      AllMouseClickManager allMouseClickManager = new AllMouseClickManager();
       for(int i=0;i<myBytton.length;i++){
         myBytton[i].addMouseListener(allMouseClickManager);
       }


Это сообщение отредактировал(а) xaoc2 - 27.10.2004, 15:43
PM MAIL   Вверх
Domestic Cat
Дата 27.10.2004, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Похоже на него :)


--------------------

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0701 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.