как удалить MouseListener / ActionListener на JTextField

У меня есть следующий код, добавляющий ActionListener к JTextField:

chatInput.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseClicked(java.awt.event.MouseEvent evt) {
       chatInputMouseClicked(evt);
    }
});

Теперь, как я удаляю это использование MouseListener chatInput.removeMouseListener(), так как для этой функции нужен аргумент?

10
задан Roman 13 April 2010 в 08:42
поделиться

1 ответ

Вы можете рассмотреть 3 подхода:

1) Сохраните ссылку на слушателя перед добавив его, чтобы вы могли удалить его позже:

MouseListener ml = new MouseAdapter() {
    public void mouseClicked(java.awt.event.MouseEvent evt) {
        chatInputMouseClicked(evt);
    }
};
chatInput.addMouseListener (ml);
...
chatInput.removeMouseListener (ml);

2) Вы можете получить все определенные прослушиватели событий с помощью соответствующих методов, например:

public MouseListener[] getMouseListeners()  

или

public EventListener[] getListeners(Class listenerType)

Вот javadocs для first и второй метод . Если вы можете определить среди всех слушателей тот, который вы хотите удалить, или если вы хотите удалить всех слушателей, этот подход может помочь.


3) Вы можете использовать логическую переменную, которая "выключит" ваш слушатель. Но вы должны заметить, что переменная должна быть полем внешнего класса:

private boolean mouseListenerIsActive;

public void doSmthWithMouseListeners () {
    mouseListenerIsActive = true;

    chatInput.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent evt) {
            if (mouseListenerIsActive) {
               chatInputMouseClicked(evt);
            }
        }
    });
}

public void stopMouseListner () {
    mouseListenerIsActive = false;
}

Я бы предпочел третий, потому что он дает некоторую гибкость, и если я хочу снова включить прослушиватель мыши, мне не нужно будет создавать новый объект.

19
ответ дан 3 December 2019 в 20:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: