как удалить 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(), так как эта функция требует аргументов?

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 для первый и второй методы. Если вы можете определить среди всех слушателей, тот, который вы хотите удалить или если вы хотите удалить всем слушателям такой подход может помочь.


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;
}

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