Вы можете использовать removeListener()
метод SWT Widget .Для этого вам понадобится ссылка на Listener
.
Эту ссылку можно получить, используя метод getListeners(int eventType)
.
Типы событий определены как константы в SWT-классе .Это может выглядеть так, я не уверен насчет фактического типа события, хотя
Listener[] focusOutListeners = myWidget.getListeners(SWT.FocusOut);
for(int i = 0 ; i< focusOutListeners; i++){
myWidget.removeListener(SWT.FocusOut, focusOutListeners[i]);
}
// ... do stuff the listeners will not know about ...//
for(int i = 0 ; i< focusOutListeners; i++){
myWidget.addListener(SWT.FocusOut, focusOutListeners[i]);
}
AFAIK, в SWT нет других средств для отключения Listener
, но как ваш Listener
просто реализует соответствующий интерфейс, вы можете реализовать пользовательские методы отключения / включения.Тогда ваш код мог бы выглядеть так: Listener [] focusOutListeners = myWidget.getListeners (SWT.FocusOut);
for(int i = 0 ; i< focusOutListeners; i++){
CustomListener listener = (CustomListener)focusOutListeners[i]);
listener.disable();
}
// ... do stuff the listeners will not know about ...//
for(int i = 0 ; i< focusOutListeners; i++){
CustomListener listener = (CustomListener)focusOutListeners[i]);
listener.enable();
}
Действие под капотом хорошо описано в ответе Пола Вебстера.