Domanda

Ho il seguente codice di aggiunta di un ActionListener a un JTextField:

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

Ora come faccio a rimuovere questo MouseListener utilizzando chatInput.removeMouseListener(), dal momento che questa funzione ha bisogno di un argomento?

È stato utile?

Soluzione

Si può considerare 3 approcci:

1) Salva riferimento al vostro ascoltatore prima di aggiungere in modo da poter rimuovere in seguito:

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

2) È possibile ottenere tutti certi ascoltatori di eventi con i metodi corrispondenti come:

public MouseListener[] getMouseListeners()  

o

public EventListener[] getListeners(Class listenerType)

Ecco i javadocs per la prima e secondo metodi . Se è possibile identificare tra tutti gli ascoltatori quello che si desidera rimuovere o se si desidera rimuovere tutti gli ascoltatori questo approccio può aiutare.


3) È possibile utilizzare qualche variabile booleana che 'spegne' il vostro ascoltatore. Ma si dovrebbe notare che la variabile dovrebbe essere un campo di classe esterna:

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

io preferirei il terzo perché dà una certa flessibilità e se voglio accendere listener del mouse ancora una volta che non avrà bisogno di creare un nuovo oggetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top