2011-10-03 10 views
6

मेरे पास एक जेएलएबल है जो माउस में प्रवेश करते समय अपने पृष्ठभूमि रंग को बदलता है। मेरी समस्या यह है कि मैं चाहता हूं कि माउस बाहर निकलने के बाद जेएलएबल पारदर्शी बन जाए।जेएलएबल पृष्ठभूमि को फिर से पारदर्शी बनाएं

क्या कोई ऐसा बयान है जिसका मैं इसे पूरा करने के लिए उपयोग कर सकता हूं?

+2

बेहतर मदद जल्दी के लिए, एक [SSCCE] (http://pscode.org/sscce.html) पोस्ट करते हैं। –

उत्तर

17

लिए यह एक आलसी छुट्टी जर्मनी में यहाँ है, तो दो जवाब के संयोजन:

final JLabel label = new JLabel("some label with a nice text"); 
    label.setBackground(Color.YELLOW); 
    MouseAdapter adapter = new MouseAdapter() { 

     /** 
     * @inherited <p> 
     */ 
     @Override 
     public void mouseEntered(MouseEvent e) { 
      label.setOpaque(true); 
      label.repaint(); 
     } 

     /** 
     * @inherited <p> 
     */ 
     @Override 
     public void mouseExited(MouseEvent e) { 
      label.setOpaque(false); 
      label.repaint(); 
     } 

    }; 
    label.addMouseListener(adapter); 

समस्या (वास्तव में, मैं एक बग के रूप में यह संबंध होते हैं) का अपारदर्शी संपत्ति की स्थापना एक रीपेंट ट्रिगर नहीं करता के रूप में उपयुक्त होगा है। JComponent एक परिवर्तन ईवेंट सक्रिय है, लेकिन लगता है कोई नहीं सुन रहा है जैसे:

public void setOpaque(boolean isOpaque) { 
    boolean oldValue = getFlag(IS_OPAQUE); 
    setFlag(IS_OPAQUE, isOpaque); 
    setFlag(OPAQUE_SET, true); 
    firePropertyChange("opaque", oldValue, isOpaque); 
} 
+0

+1, मुझे आश्चर्य है कि repaint() स्वचालित रूप से नहीं किया जाता है। – camickr

+0

@camickr मुझे भी – kleopatra

2

JLabel डिफ़ॉल्ट रूप से पारदर्शी और गैर अपारदर्शी है, आप माउस से बाहर निकलने पर पृष्ठभूमि बदलना चाहते हैं, तो आप के लिए है:

  • setBackground() दोनों राज्यों के लिए,

  • परिवर्तन प्रवेश और निकास JPanel या किसी अन्य JComponent

+1

असल में, नहीं .. _background color_ को टॉगल करने की कोई आवश्यकता नहीं है - यह नहीं दिख रहा है कि घटक पारदर्शी है :-) – kleopatra