swing - Java removing and adding back MouseListener later -


मेरे पास 4 JLabel s है

पहले क्लिक पर:

मैंने पृष्ठभूमि रंग को लाल और हटा दिया JLabel 's MouseListener है कि मैंने क्लिक किया है।

दूसरे क्लिक पर:

मैं पृष्ठभूमि का रंग हरे रंग में बदलता हूं, लेकिन JLabel जो मैंने पहले क्लिक किया था उसे लाल से हरे रंग में नहीं बदलना चाहिए क्योंकि मैंने पहले ही MouseListener को हटा दिया था।

तीसरे क्लिक पर: < P> मैं MouseListener को JLabel MouseListener में वापस जोड़ना चाहता हूं, जिसे पहले क्लिक में हटा दिया गया है और पृष्ठभूमि का रंग काला करने के लिए बदलना है I लेकिन यकीन है कि कैसे मैं वापस जोड़ सकते हैं नहीं।

मैं addMouseListener मेरी addbackMouseListener (JLabel लेबल) में विधि का उपयोग करने की कोशिश की, लेकिन यह है कि मैं में पारित नहीं हो सकता लगता है "इस" पैरामीटर में और मैं नहीं जानता कि addMouseListener के पैरामीटर में क्या पारित करने के लिए।

  सार्वजनिक शून्य addbackMouseListener (JLabel लेबल) {ला bel.addMouseListener (this); & Lt; - इस में नहीं जा सकता, मैं क्या कर सकता हूं? }   

कोड:

  आयात करें java.awt.Color; आयात करें java.awt.flowLayout; आयात करें java.awt.event.MouseAdapter; आयात करें java.awt.event.MouseEvent; आयात javax.swing.JFrame; आयात javax.swing.JLabel; आयात javax.swing.JPanel; आयात javax.swing.SwingUtilities; @SuppressWarnings ( "धारावाहिक") सार्वजनिक वर्ग rMouseListener फैली JFrame {निजी JLabel [] JLabel = {नए JLabel (), नए JLabel (), नए JLabel (), नए JLabel ()} ;; निजी जेपीनल पैनल = नया जेपीनल (नया फ्लो लेआउट ()); निजी इंट क्लिककाउंट = 0; निजी बूलियन माउस हटाए गए = गलत; सार्वजनिक rMouseListener () (के लिए (int i = 0; i & lt; 4; i ++) {jLabel [i] .setText (i + ""); panel.add (JLabel [i]); JLabel [i] .addMouseListener (नई MouseAdapter () {@Override सार्वजनिक शून्य mousePressed (MouseEvent ई) {JLabel लेबल = (JLabel) e.getSource (); clickCount ++; / * लेबल कि * / अगर क्लिक किया जाता है के लिए mouseListener को दूर (clickCount == 1) {label.setBackground (Color.red); label.setOpaque (सही); label.removeMouseListener (this); mouseRemoved = true} / * की पुष्टि है कि उस लेबल के लिए mouseListener पहले क्लिक के बाद हटा दिया जाता है । * / else if (clickCount == 2) {label.setBackground (Color.green); label.setOpaque (सही);} / * यदि mouseListener निकाल दिया जाता है की जाँच एक है कि Perviously पर निकाल दिया जाता है के लिए mouseListener वापस जोड़ें। ClickCount = 1 अगर इसे निकाला जाता है / / अगर (क्लिक करें == 3) {if (mouseRemoved) {addbackMouseListener (लेबल); label.setBackground (Color.black);}}}}); } जोड़ (पैनल); setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE); पैक (); setSize (400,600); setLocationRelativeTo (शून्य); setVisible (सही); } सार्वजनिक शून्य addbackMouseListener (JLabel लेबल) {label.addMouseListener (यह); & Lt; - इस में नहीं जा सकता, मैं क्या कर सकता हूं? } सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] आर्ग्स) {SwingUtilities.invokeLater (नई रननाबल) {@Override सार्वजनिक शून्य चला () {नई rMouseListener ();}}); }}    

यह को संदर्भित करता है rMouseListener < / Code>, जो JFrame को बढ़ाता है, यह MouseListener

को लागू नहीं करता है आपका सबसे अच्छा शर्त आपके मूल MouseAdapter एक आंतरिक वर्ग और जब आप अपनी कक्षा बनाते हैं और इसके बजाय इसे जोड़ने और हटाने के बजाय इसका एक उदाहरण बनाते हैं

उदाहरण के लिए ...

  सार्वजनिक वर्ग rMouseListener JFrame { // ... निजी माउसलीस्टनर माउस लिस्टनर; सार्वजनिक rMouseListener () {mouseListener = नया MouseHandler (); के लिए (इंट I = 0; i & lt; 4; i ++) {जे एलैबेल [i] .setText (i + ""); panel.add (JLabel [i]); JLabel [i] .addMouseListener (mouseListener); } // ...} सार्वजनिक शून्य addbackMouseListener (JLabel लेबल) {label.addMouseListener (mouseListener); } // ... सार्वजनिक माउसहैंडलर ने माउसएडैप्टर का विस्तार किया {@ ओवरराइड पब्लिक व्हाइड माउस माउसड (माउसईवेंट ई) {जेएलैबल लेबल = (जेएलैबल) ई.टेटसोर्स (); clickCount ++; / * उस लेबल के लिए माउस लिस्टनर को हटा दें जिसे क्लिक किया जाता है * / if (clickcount == 1) {label.setBackground (Color.red); label.setOpaque (सही); label.removeMouseListener (this); MouseRemoved = सच; } / * यह सत्यापित करने के लिए कि उस लेबल के लिए माउस लिस्टनर को पहली क्लिक के बाद हटा दिया गया है। * / Else if (clickcount == 2) {label.setBackground (Color.green); label.setOpaque (सही); } / * जांचें कि क्या माउस लिस्टनर को हटा दिया गया है। माउस लिस्टनर को उस एक से जोड़ दें जो कि clickcount = 1 पर जरूर निकाला जाता है यदि इसे हटा दिया गया है / / अगर (क्लिक करें == 3) {if (mouseRemoved) {addbackMouseListener (label); label.setBackground (Color.black); }}}}}    

Comments

Popular posts from this blog

ios - Adding an SKSpriteNode to SKScene from a child SKSpriteNode -

Matlab transpose a table vector -

c# - Textbox not clickable but editable -