2013-08-12 5 views
0

Я хочу добавить прослушиватель выбора к своему настраиваемому элементу управления, который содержит несколько кнопок, так что всякий раз, когда нажимается кнопка, конкретная функция должна выполняться элементом управления. Проблема заключается в следующем: я хочу добавить слушателя к самому элементу управления, а не по отдельности для каждой из его дочерних кнопок. Что мне делать?Как добавить слушателя в пользовательский элемент управления?

+0

Если ваше управление является самой панелью или рамкой, слушатель может быть добавлен к ней. – Paniz

+0

@Paniz Я использую SWT, поэтому в основном мой пользовательский элемент управления является составным – Anas

ответ

1

Из статьи Creating Your Own Widgets using SWT:

SWT Событие Механизм

SWT обеспечивает механизм слушателя низкого уровня, а также обычной Java «типизированного» слушателей. Каждый виджет SWT понимает addListener (int eventType, Listener listener) и notifyListeners (int eventType, Event event). Константы eventType определены в классе SWT. Когда происходит событие, виджет создает объект события SWT, содержащий соответствующую константу типа. Метод notifyListeners вызывает handleEvent (событие события) для прослушивателя. Если вам нужно повторно использовать существующее событие SWT, вы обычно используете этот механизм.

Например, если ваш виджет реализует событие выбора, вы могли бы реализовать свой «напечатал» добавлять и удалять методы следующим образом:

public void addSelectionListener(SelectionListener listener) { 
    addListener(SWT.Selection, new TypedListener(listener)); 
} 

public void removeSelectionListener(SelectionListener listener) { 
    removeListener(SWT.Selection, listener); 
} 

Когда «событие выбора» происходит в виджете (скажем, когда child1), вы уведомляете слушателей выбора приложения, используя notifyListeners.

child1.addListener(SWT.Selection, new Listener() { 
    public void handleEvent(Event e) { 
     notifyListeners(SWT.Selection, new Event()); 
    } 
}); 

Обратите внимание, что когда мы добавляем слушателя, мы сначала завершаем его в TypedListener. Это связано с тем, что метод handleEvent (Event event) типа TypedListener создает соответствующий подкласс TypedEvent на основе типа события, а затем вызывает соответствующий метод для типизированного события. Таким образом, приложения могут добавлять Java-типизированные прослушиватели к виджетам, но реализации виджета могут использовать более эффективный механизм прослушивания нижнего уровня. Однако убедитесь, что реализация виджета предоставляет типизированный API-интерфейс прослушивателя. Приложения не должны вызывать низкоуровневые методы прослушивания. Выбранные методы прослушивателя предотвращают случайные ошибки программирования, такие как допущение, что все виджеты могут обрабатывать все типы событий или что все поля в классе Event действительны для всех событий.

Смежные вопросы