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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> События, Источники, блоки, методы 
:(
    Опции темы
GIK
Дата 28.1.2006, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

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



Всем привет.
Я в JAVA новичок, так что извиняюсь заранее, если буду тупить.
Для меня непонятна логическая структура событий и их обработка.
Допустим есть класс, который, как я понял, реализует как источник (он сам им является), так и блок прослушивания. Он же реализует интерфейсы в которых определены методы для обработки событий.
1. Что означает аргумент MouseEvent me в интерфейсных методах типа public void MouseClicked
2. Чтоза метод или объект addMouseListener(this); который может регистрировать классы как блоки прослушивания.? То что он регистрирует класс в котором он находится мне понятно.
3. Понятие источник - это класс который определяет интерфейсные методы типа public void MouseClicked ?

Код

import java.awt.*;
 import java.awt.event.*;
 import java.applet.*;
 /*
  <applet code="MouseEvents" width=400 height=100>
  </applet>
 */
 
public class MouseEvents extends Applet
implements MouseListener, MouseMotionListener {
   
   String msg = "";
   int mouseX=0, mouseY=0;
 
  public void init(){
    addMouseListener(this); //регистрация себя как блока прослушивания
                            //Mouse-события.

    addMouseMotionListener(this); //регистрация себя как блока прослушивания
                                  //MouseMotion-события. 
   } 

  //Обработка щелчка мыши
  public void mouseClicked(MouseEvent me) {
    
   mouseX = 0; 
   mouseY = 10;
   msg = "Mouse Clicked";
   repaint();
  }
  //Обработка ввода мыши в область окна 
  public void mouseEntered(MouseEvent me) {
    
   mouseX = 0; 
   mouseY = 10;
   msg = "Mouse Entered";
   repaint();
  }
  //Обработка вывода мыши из области окна
  public void mouseExited(MouseEvent me) {
    
   mouseX = 0; 
   mouseY = 10;
   msg = "Mouse Exidet";
   repaint();
  }
   //Обработка нажатия кнопки
  public void mousePressed(MouseEvent me) {
    
   mouseX = me.getX(); 
   mouseY = me.getY();
   msg = "Down";
   repaint();
  }
  //Обработка освобождения кнопки
  public void mouseReleased(MouseEvent me) {
    
   mouseX = me.getX(); 
   mouseY = me.getY();
   msg = "Up";
   repaint();
  }
  //Обработка перетаскивания мыши
  public void mouseDrraged(MouseEvent me) {
    
   mouseX = me.getX(); 
   mouseY = me.getY();
   msg = "*";
   showStatus("Dragging mouse at" + mouseX + ","+ mouseY);
   repaint();
  }
   //Обработка перемещения мыши
  public void mousePressed(MouseEvent me) {
   showStatus("Moving mouse at" + me.getX + ","+ me.getY);
   repaint();
  }

  public void paint(Graphics g) {
   
   g.drawString(msg, mouseX, mouseY);
  } 
 }
 



--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
LSD
Дата 28.1.2006, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(GIK @ 28.1.2006, 10:15 Найти цитируемый пост)
1. Что означает аргумент MouseEvent me в интерфейсных методах типа public void MouseClicked

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

Цитата(GIK @ 28.1.2006, 10:15 Найти цитируемый пост)
2. Чтоза метод или объект addMouseListener(this); который может регистрировать классы как блоки прослушивания.? То что он регистрирует класс в котором он находится мне понятно.

Тогда что непонятно? Он больше ничего другого не делает, кроме как регистрирует обработчики событий.

Цитата(GIK @ 28.1.2006, 10:15 Найти цитируемый пост)
3. Понятие источник - это класс который определяет интерфейсные методы типа public void MouseClicked ?

Нет. Это объект в котором произошло данное событие, кнопка, текстовое поле и т.д. В твоем случае это объект типа MouseEvents.

P.S. Ты или просто не правильно употребляешь термины, или действительно путаешь класс и объект?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
GIK
Дата 28.1.2006, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

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



Цитата

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

Понял.
Цитата

Нет. Это объект в котором произошло данное событие, кнопка, текстовое поле и т.д. В твоем случае это объект типа MouseEvents.

Но в корне все равно стоит класс который определен в аплете?
Т.е если я создам другой класс к примеру (неопределенный в тегах applet), который реализует нужные интерфейсы и определяет методы, то он не будет реализовывать (обрабатывать) события, которые произойдет в окне аплета?



--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
LSD
Дата 28.1.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(GIK @ 28.1.2006, 14:57 Найти цитируемый пост)
Но в корне все равно стоит класс который определен в аплете?

Не понимаю, в каком корне?

Цитата(GIK @ 28.1.2006, 14:57 Найти цитируемый пост)
Т.е если я создам другой класс к примеру (неопределенный в тегах applet), который реализует нужные интерфейсы и определяет методы, то он не будет реализовывать (обрабатывать) события, которые произойдет в окне аплета?

Не совсем. Есть класс источник событий, есть класс заинтересованный в этом событии (слушатель события).

Пример:
Код
import java.util.*;

public class EventDemo extends Thread
{
  private ArrayList<DemoListener> listenersList = new ArrayList<DemoListener>();

  public EventDemo()
  {
    super("EventDemoThread");
  }

  public void addDemoListener(DemoListener listener)
  {
    listenersList.add(listener);
  }

  public void removeDemoListener(DemoListener listener)
  {
    listenersList.remove(listener);
  }

  private void fireDemoEvent(EventObject event)
  {
    for(DemoListener listener: listenersList)
      listener.eventHappend(event);
  }

  public void run()
  {
    for(int i = 0; i < 10; i++)
    {
      fireDemoEvent(new EventObject(this));
      try
      {
        Thread.sleep(1500);
      }
      catch(InterruptedException ex)
      {}
    }
  }

  public String toString()
  {
    return "Event demo class";
  }

  public static void main(String[] args)
  {
    DemoListener listener = new DemoListener()
    {
      public void eventHappend(EventObject ev)
      {
        System.out.println("Event happend: " + ev);
      }
    };
    EventDemo eventDemo = new EventDemo();
    eventDemo.addDemoListener(listener);
    eventDemo.start();
  }

  public interface DemoListener extends EventListener
  {
    public void eventHappend(EventObject ev);
  }
}


В данном случае источником события будет объект eventDemo (строка 56), а слушателем события объект listener (строка 49).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
GIK
Дата 31.1.2006, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

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



После упорного перебора книг по JAVA и событиям я понял следуещее:
Источник события - это обычно сам аплет, грубо говоря, он же должен реализовать регистрацию блоков прослушивания. Когда происходит событие, вызавается соответствующий класс события который получает нужную информацию, допустим ActionEvent(Object src, int type, String cmd). Незнаю как эта информация в дальнейшем используется, но после определенного события этот класс посылается блоку прослушивания в качестве параметра соответствующему методу события, например
Код

public void mouseEntered(MouseEvent me)  

а точнее посылается ссылка на объект-событие. С помощью нее, обращаяс к объекту события через методы, можно получить нужную информацию.
То что блок события может находится не в самом аплете это понятно, но источником всегда должен быть сам аплет.
Можно ли вызвать класс-событие из кокого нибуть объекта, т.е. не после генерации события?

Это сообщение отредактировал(а) GIK - 31.1.2006, 14:14


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
batigoal
Дата 31.1.2006, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Цитата(GIK @ 31.1.2006, 15:12 Найти цитируемый пост)

Можно ли вызвать класс-событие из кокого нибуть объекта, т.е. не после генерации события?

Да, можно. Точный метод не помню - что-то вроде fireEvent().


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
LSD
Дата 31.1.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(GIK @ 31.1.2006, 14:12 Найти цитируемый пост)
Можно ли вызвать класс-событие из кокого нибуть объекта, т.е. не после генерации события?

Иногда да, иногда нет. Зависит от реализации. Например события нажатия на JButton можно вызвать с помощью метода doClick() (там будут оповещены все соответсвующие листенеры и отрисована соответсвующая картинка). А вот эмулировать события от мыши нельзя, потому что все соответсвующие fire методы protected.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
COVD
Дата 31.1.2006, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

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



Эти термины - событие, лисенер, источник события - просто обьектно-ориентированное толкование обычных вещей. Если в каком-то месте программы у вас происходит вызов метода и туда передается параметр, то можно сказать что этот метод - лисенер, параметр - событие, а тот участок кода, откуда осуществляется вызов - источник события.

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

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

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


 




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


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

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