Здравствуйте, 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
Здравствуйте, ekamaloff, Вы писали:
Спасибо за ответ!
Но я не очень поняла некоторые моменты. Может быть обьясните поподробней, пожайлуста. Мне не очень ясна строка:
private List<ActionListener> listeners = new ArrayList<ActionListener>();
не понимаю эту запись <ActionListener>.
А также не допоняла этот метод:
private void fireEvent(ActionEvent event) {
for(ActionListener listener: listeners) {
listener.actionPerformed(event);
}
}
точнее эту запись: ActionListener listener: listeners.
Спасибо!
Излишнее цитирование удалено с надеждой на успешное изучение автором правил форума.
Здравствуйте, 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
Здравствуйте, 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.
Все же спасибо за совет!
Здравствуйте, 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, изд. Питер).