ActionListener
От: Dali  
Дата: 20.07.06 17:08
Оценка:
Привет всем!
У меня такой вопрос. Я создала класс:
private class SDragDropLabel extends SLabel implements DropTarget, DragSource {...}.
Необходимо, чтобы при нажатии мыши на объект этого класса происходило событие. Т.е. мне надо применить к объектам метод addActionListener (или возможно метод другого Листенера). Но я не знаю как прописать в моем классе эти методы, чтобы их можно было использовать для его обьектов.
Re: ActionListener
От: ekamaloff Великобритания  
Дата: 21.07.06 04:34
Оценка:
Здравствуйте, Dali, Вы писали:

D>У меня такой вопрос. Я создала класс:

D> private class SDragDropLabel extends SLabel implements DropTarget, DragSource {...}.
D>Необходимо, чтобы при нажатии мыши на объект этого класса происходило событие. Т.е. мне надо применить к объектам метод addActionListener (или возможно метод другого Листенера). Но я не знаю как прописать в моем классе эти методы, чтобы их можно было использовать для его обьектов.

Я не совсем понял в чем проблема, но может у тебя возникло недопонимание, как сделать это:

public class SDragDropLabel extends SLabel implements DropTarget, DragSource {
    
    private List<ActionListener> listeners = new ArrayList<ActionListener>();
    
    public void addListener(ActionListener listener) {
        listeners.add(listener);
    }
    
    public void removeListener(ActionListener listener) {
        listeners.remove(listener);
    }
    
    private void fireEvent(ActionEvent event) {
        for(ActionListener listener: listeners) {
            listener.actionPerformed(event);
        }
    }
        
        // ...
    
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[2]: ActionListener
От: Dali  
Дата: 21.07.06 08:17
Оценка:
Здравствуйте, ekamaloff, Вы писали:

Спасибо за ответ!
Но я не очень поняла некоторые моменты. Может быть обьясните поподробней, пожайлуста. Мне не очень ясна строка:

private List<ActionListener> listeners = new ArrayList<ActionListener>();
не понимаю эту запись <ActionListener>.
А также не допоняла этот метод:
private void fireEvent(ActionEvent event) {
for(ActionListener listener: listeners) {
listener.actionPerformed(event);
}
}
точнее эту запись: ActionListener listener: listeners.

Спасибо!

Излишнее цитирование удалено с надеждой на успешное изучение автором правил форума.
Re[3]: ActionListener
От: ekamaloff Великобритания  
Дата: 21.07.06 08:40
Оценка:
Здравствуйте, Dali, Вы писали:

D>private List<ActionListener> listeners = new ArrayList<ActionListener>();

D>не понимаю эту запись <ActionListener>.
D>А также не допоняла этот метод:
D>private void fireEvent(ActionEvent event) {
D> for(ActionListener listener: listeners) {
D> listener.actionPerformed(event);
D> }
D> }
D>точнее эту запись: ActionListener listener: listeners.

Думаю, стоит почитать какой-нибудь туториал по java, в частности про generic-и и циклы , я просто даже не знаю, как на такие вопросы ответить. Можно попробовать еще вот эту ссылку: http://java.sun.com/j2se/1.5.0/docs/guide/language/index.html
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[3]: ActionListener
От: Blazkowicz Россия  
Дата: 21.07.06 08:40
Оценка:
Здравствуйте, Dali

Вот тебе 3 ссылки на изучение.

http://rsdn.ru/Info/rules.xml
http://rsdn.ru/article/java/tiger.xml
Автор(ы): Ноздреватых Ростислав aka Blazkowicz
Дата: 27.07.2002
Выход проекта под кодовым именем Tiger на сегодняшний день – одно из самых ожидаемых событий в мире Java 2. Новая версия, 1.5, – это не просто ещё одна единичка в номере версии, это ряд революционных новшеств, которых, наверное, не было со времен появления Java 2. В этой статье будут рассмотрены основные из них.

http://rsdn.ru/Forum/Info.aspx?name=FAQ.rsdn.highlighting
Автор: anvaka
Дата: 15.05.06


Ну, и на закуску ещё одна если захочется понять больше:

http://rsdn.ru/article/java/genericsinjava.xml
Автор(ы): Kobylansky Stanislav
Дата: 22.05.2005
Наконец, свершилось то, чего так долго ждали java разработчики, вышла очередная версия java с поддержкой многих вещей, о которых давно мечтают разработчики. Одним из нововведений стали шаблоны. Как раз о них и пойдет речь в этой статье.
Re[4]: ActionListener
От: Dali  
Дата: 21.07.06 09:37
Оценка:
Здравствуйте, ekamaloff, Вы писали:

E>Думаю, стоит почитать какой-нибудь туториал по java, в частности про generic-и и циклы , я просто даже не знаю, как на такие вопросы ответить. Можно попробовать еще вот эту ссылку: http://java.sun.com/j2se/1.5.0/docs/guide/language/index.html


Спасибо за ответ!
Просто получилось так,что я не перешла на Ява 1.5........а работаю с версией 1.4.2_11, поэтому такие понятие как generic-и не были понятны. Но код моей программы написан именно на этой версии и прийдется с ней и доработать до конца думаю.
Можете быть знаете как это прописать без generic.
Все же спасибо за совет!
Re[5]: ActionListener
От: iZEN СССР  
Дата: 23.07.06 00:04
Оценка: -1
Здравствуйте, Dali, Вы писали:

D>Здравствуйте, ekamaloff, Вы писали:


E>>Думаю, стоит почитать какой-нибудь туториал по java, в частности про generic-и и циклы , я просто даже не знаю, как на такие вопросы ответить. Можно попробовать еще вот эту ссылку: http://java.sun.com/j2se/1.5.0/docs/guide/language/index.html


D>Спасибо за ответ!

D>Просто получилось так,что я не перешла на Ява 1.5........а работаю с версией 1.4.2_11, поэтому такие понятие как generic-и не были понятны. Но код моей программы написан именно на этой версии и прийдется с ней и доработать до конца думаю.
D>Можете быть знаете как это прописать без generic.
D>Все же спасибо за совет!
Совсем запутали бедную девушку.

Основная техника обработки событий в java (AWT и SWING) базируется на нескольких вещах:
1) способ получения события от системы;
2) создание и хранение ссылок на объекты, которые заинтересованы в получении событий;
3) способ оповещения о наступлении события;
4) заинтересованные объекты могут (но необязательно) поддерживать общий интерфейс слушателя событий целевого объекта.

Чтобы реализовать п.1 объекту нужно: а) самому стать получателем событий (для перехвата низкоуровневых событий AWT нужно написать одну строчку) и б) мочь обрабатывать их (написать метод обычный слушателя).
Чтобы реализовать п.2 объекту нужно: а) предоставить контейнер (Vector или ArrayList) для этих ссылок (пример: Vector myListeners = new Vector(); ) б) принимать ссылки о заинтересованных в (его) событиях объектах (myListeners.add(newListener); ).
Чтобы реализовать способ п.3 объекту нужно: а) создать объект нового события (своего собственного события, определив класс MyEvent и создав его экземпляр); б) определить метод рассылки с энумератором (простейший цикл, например) для контейнера, в котором вызывать метод оповещения например так: protected void fireEvent(MyEvent event) {цикл по контейнеру: для всех заинтересованных вызвать xxxListener.actionPerformed(event);}, где событие класса MyEvent — это "внутренне переработанное" объектом системное событие в новое собственное, которое передаётся всем заинтересованным слушателям.
Чтобы реализовать п.4 нужно использовать заранее определённые объекты для контейнера источника событий, либо описывать общий интерфейс слушателя (MyEventListener) и реализовывать его абстрактный метод actionPerformed(MyEvent event) в каждом конкретном классе объекта, заинтересованного в получении события MyEvent.

Технику синхронизации неплохо бы применить, но это на потом можно оставить.

Шаблоны из Java 5.0 трогать пока не стоит, а лучше почитать книжку "Swing: Эффектные пользовательские интерфейсы. Библиотека программиста" товарища Портянкина (ISBN 5-469-00005-2, изд. Питер).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.