Собственное событие

Тема в разделе "Java", создана пользователем Tinki, 8 ноя 2007.

Статус темы:
Закрыта.
  1. Tinki

    Tinki Гость

    Народ! Как мне подписаться на событие paint для Frame?
    Я из thread раз в секунду вызываю repaint(). Надо написать custom event, который бы резво на такое событие реагировал.
    Я целый день бьюсь и ничего не выходит.
    Можно мне рабочий сырец?
    Хоть что-нибудь дайте, а то моск уже булькает. :)
     
  2. Tinki

    Tinki Гость

    Замутил вот таку строчку. Програ работает и резво откликается на позыва потока.
    Хотя я убей не пойму, чем такой хитровыдуманный код отличается(и превосходит) явный вызов метода. Но уж условие такое, сделать собственное событие. <_<
    К чему строчу... Как бы мне в MyListener (в конце кода) из переменной dde вычленить Dot? который закладывается через this.fireDotDrawn(350). Когда выезжает список-подсказка после "dde.",в нем по-моему только 8 строк касательно event, но ничего про мои встроенные переменные. <_<

    Код (Text):
        class Painter extends Thread{
    private Vector listeners = new Vector();
    private int w=-1;
    public void run(){
    if (w==-1){
    w=i;
    }
    while (true){
    System.out.println(w);
    xCr[w]=(rnd.nextInt(300));
    yCr[w]=(rnd.nextInt(300));
    System.out.println(xCr[w]+" "+ yCr[w]);
    this.fireDotDrawn(350);
    repaint();
    try {
    sleep(1000);
    } catch(InterruptedException e) {}
    }
    }
    public synchronized void addDotDrawnListener(DotDrawnListener ddl) {
    listeners.addElement(ddl);
    }
    public synchronized void removeDotDrawnListener(DotDrawnListener ddl) {      
    listeners.removeElement(ddl);
    }
    protected void fireDotDrawn(int Dot) {
    Vector l;
    DotDrawnEvent dde = new DotDrawnEvent(this, Dot);
    synchronized (this) {
    l = (Vector) listeners.clone();}

    // Оповестим подписчиков о наступлении события

    for (int i = 0; i < l.size(); i++) {
    ((DotDrawnListener)l.elementAt(i)).DotDrawn(dde);
    }
    }
    }

    class Butreac implements ActionListener{
    public void actionPerformed(ActionEvent ae) {
    i++;
    yCr = new int[i+1];
    xCr = new int[i+1];
    thDot = new Painter[i+1];
    thDot[i] = new Painter();
    thDot[i].addDotDrawnListener(mylis);
    thDot[i].start();

    }

    }

    interface DotDrawnListener extends java.util.EventListener {
    void DotDrawn(DotDrawnEvent dde);
    }

    public class DotDrawnEvent extends java.util.EventObject {

    protected transient int DotCode;

    DotDrawnEvent(java.lang.Object source, int Dot) {
    super(source);
    DotCode = Dot;
    }

    public int getDotDrawn() {
    return DotCode;
    }
    }



    public class MyListener implements DotDrawnListener {
    public void DotDrawn(DotDrawnEvent dde) {
    //Вот тут хочу писать dde.Dot, но такого варианта нет в списке.
    System.out.println("Good!");
    }

    }
     
  3. Azrael

    Azrael Гость

    Для: Tinki
    Ээээ, а неужто dde.getDotDrawn() не работает?

    У Вас в Painter.run() вызывается this.fireDotDrawn(350); (protected void fireDotDrawn(int Dot) ), в нем DotDrawnEvent dde = new DotDrawnEvent(this, Dot);
    А в конструкторе DotDrawnEvent прописано
    Код (Text):
    DotDrawnEvent(java.lang.Object source, int Dot) {
    super(source);
    DotCode = Dot;
    }
    при этом в самом классе нет DotDrawnEvent.Dot.

    P.S.
    Класс Painter в Вашей разработке может в дальнейшем перестать быть внутренним по отношению к Frame, соответственно, вызвать repaint напрямую не получится
     
Загрузка...
Похожие Темы - Собственное событие
  1. NickProstoNick
    Ответов:
    2
    Просмотров:
    651
  2. vadpetr
    Ответов:
    0
    Просмотров:
    1.165
  3. Bob84
    Ответов:
    37
    Просмотров:
    4.888
  4. Мыш
    Ответов:
    1
    Просмотров:
    1.096
  5. Num2
    Ответов:
    0
    Просмотров:
    1.309
Статус темы:
Закрыта.

Поделиться этой страницей