Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Fire custom event


Автор: PashaOvechkin 24.4.2008, 13:08
Привет!

Создаю свой ивент, создаю слушатель под него как в етом примере -> http://www.exampledepot.com/egs/java.util/CustEvent.html
Етот слушатель добавляю к компоненту.

Совершенно из другого класса (и потока тоже) мне нужно бростить ивент, ну и при етом слушатель у компонента должен его словить.

Листенер
Код

public interface ChangeLanguageListener extends EventListener{
    public void changeLanguageOccurred(ChangeLanguageEvent evt);
}

Евент
Код

public class ChangeLanguageEvent extends EventObject {
    public ChangeLanguageEvent(Object source) {
        super(source);
    }
}


Класс который имплементирует листенер :
Код

public class JLButton extends JButton implements ChangeLanguageListener{
    
    private String outoutId = null;
    protected javax.swing.event.EventListenerList listenerList =
                new javax.swing.event.EventListenerList();
                
    public JLButton() {
        super();
    }
    
    public JLButton(String name) {
        super(name);        
    }
    
    public void changeLanguageOccurred(ChangeLanguageEvent evt) {
        System.out.println("!!!!!!!!!!!!!!!!!!!");
    }
}


Бросаю событие : 

Код

ChangeLanguageEvent event = new ChangeLanguageEvent("aaaaa");


Ето не работает...
Как правильно?

Автор: ivg 24.4.2008, 13:47
Цитата(PashaOvechkin @  24.4.2008,  13:08 Найти цитируемый пост)
Класс который имплементирует листенер

А где класс, который производит "диспетчеризацию" событий? По ссылке этим занимается код класса MyClass;
Цитата(PashaOvechkin @  24.4.2008,  13:08 Найти цитируемый пост)
Бросаю событие

Само по себе создание объекта класса ChangeLanguageEvent ничего такого не делает. Никакой магии  smile
Цитата(PashaOvechkin @  24.4.2008,  13:08 Найти цитируемый пост)
Как правильно?

Событие смены языковых настроек в интерфейсе приложения - глобально для приложения в целом. Так?
Тогда listenerList, addEventListener(), removeEventListener(), fireEvent() реализуйте в классе, например, Application или в классе основного окна.
Тогда бросание события будет выглядеть примерно так
Код

ChangeLanguageEvent event = new ChangeLanguageEvent("aaaaa");
Application.getInstance().fireEvent(event);

Это хозяйство должно работать в одном потоке. Что же касается нескольких потоков, тут сложнее.

Автор: PashaOvechkin 24.4.2008, 14:55
Аха - спасибоо! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)