2010-04-13 16 views
9

पर 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) अपने श्रोता के संदर्भ में सहेजें ताकि आप उसे बाद निकाल सकते हैं::

उत्तर

18

आप 3 दृष्टिकोण पर विचार कर सकते

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) 

यहां first और second विधियों के लिए 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; 
} 

मैं तीसरी पसंद करेंगे, क्योंकि यह कुछ लचीलापन प्रदान करता है और अगर मैं माउस श्रोता चालू करना चाहते हैं फिर मैं की जरूरत नहीं होगी नई वस्तु बनाने के लिए।

+0

मैं आमतौर पर एक घटक से एक श्रोता को स्थायी रूप से हटाने के लिए पहला विकल्प उपयोग करता हूं जो श्रोताओं को पंजीकृत करने वाले व्यक्ति (जैसे 'निपटान()' विधि में) रहता है। श्रोता को अस्थायी रूप से अक्षम करने के लिए, मैंने तीसरा विकल्प उपयोग किया है। यह ज्यादातर रिकर्सन को रोकने के लिए आवश्यक है। जैसे जब एक श्रोता जो पाठ परिवर्तनों पर ट्रिगर करता है, उसी पाठ (किसी भी कारण से) में परिवर्तन की ओर जाता है, तो मैं श्रोता को अपनी सुनवाई विधि की शुरुआत में अक्षम करता हूं और अंत में इसे सक्षम करता हूं। –

+0

मुझे लगता है कि इसे इस्तेमाल करने से पहले मुझे एक माउस लिस्टर बनाना होगा। मैं अज्ञात माउसलिस्टर्स को हटा नहीं सकता। – mithun1538

संबंधित मुद्दे