Вопрос

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

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

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

Это было полезно?

Решение

Вы можете рассмотреть 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;
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top