2011-09-10 20 views
5

मैं जेएफआरएएम को पूरी तरह से पारदर्शी बनाने में सक्षम हूं और जेबटन आंशिक रूप से पारदर्शी है जब तक कि मैं अपने माउस को बटन पर नहीं ले जाता (क्लिक न करें) और माउस को बटन से हटाएं (माउसइस्पेनर के माध्यम से माउसएक्सिट कहा जाता है)। क्या होता है कि जेबटन की पृष्ठभूमि फिर से खींची जाती है, इसलिए माउस पर कुछ माउस मूवमेंट्स को चालू और बंद करने के बाद बटन पूरी तरह से अपारदर्शी होता है।पूरी तरह पारदर्शी जेएफआरएएम पर आंशिक रूप से पारदर्शी जेबटन कैसे बनाएं?

public class ButtonExample extends JWindow 
{ 
    public ButtonExample() 
    { 
     JButton But = new JButton("Testing"); 
     But.setBackground(new Color(0, 0, 0, 200)); 
     But.setForeground(new Color(70, 155, 255)); 
     this.add(But); 
     this.setBackground(new Color(0, 0, 0, 0)); 
     this.setMinimumSize(new Dimension(200,100)); 
     this.setVisible(true); 
    } 

    public static void main(String[ ] Args) 
    { 
     new ButtonExample(); 
    } 
} 
+0

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

+3

हास और गाय द्वारा [गंदी रिच क्लाइंट] (http://filthyrichclients.org/) खरीदें। यह पारदर्शी घटकों और फिर कुछ करने के लिए आपको आवश्यक सभी विवरणों में जाता है। जावा स्विंग प्रोग्रामर के लिए सभी ** महान ** पुस्तक में। –

उत्तर

8

समस्या यह है कि बटन रिपोर्ट पूरी तरह से अपारदर्शी किया जा रहा है जबकि वास्तव में इस (आंशिक रूप से पारदर्शी रंग की वजह से)

but.setOpaque(false); 

BTW नहीं है सम्मेलनों :-)

संपादित

arggghh .. याद किया कि, क्षमा करें। जांच करने के लिए है कि हम क्या SwingX में करते हैं, मैं कहूंगा कि आप paintComponent ओवरराइड और पृष्ठभूमि खुद पेंटिंग को संभालने की ज़रूरत मेरे सिर के ऊपर से, जैसे की आवश्यकता

 /** 
     * @inherited <p> 
     */ 
     @Override 
     protected void paintComponent(Graphics g) { 
      if (!isOpaque() && getBackground().getAlpha() < 255) { 
       g.setColor(getBackground()); 
       g.fillRect(0, 0, getWidth(), getHeight()); 
      } 
      super.paintComponent(g); 
     } 

कोशिश नहीं की है, हालांकि, हो सकता है "और अधिक हो रही है अपारदर्शी "वापस कर के साथ फिर से है, तो .. कल

संपादित वापस आ जाएगा 2

ठीक है, जाँच की - संपादित कोड सही ढंग से काम करता है। तो सारांश में: पारदर्शी पृष्ठभूमि के साथ घटकों

  • रिपोर्ट करना होगा कि वे डिफ़ॉल्ट चित्र तंत्र
  • पृष्ठभूमि चित्र अपने हाथ में लेने और पृष्ठभूमि रंग खुद के साथ यह भरना होगा भ्रमित नहीं करने के लिए अपारदर्शी नहीं हैं (SwingX JXPanel फाई करता है एक अल्फा संपत्ति के लिए स्पष्ट समर्थन)
आपकी सुविधा के लिए

द्वारा, यहाँ गलत/सही पृष्ठभूमि साथ-पक्ष के साथ एक छोटे से runnable है

public class TransparentButton { 

    public TransparentButton() { 
     JWindow incorrectOpaque = createWindow("incorrect opaque", true); 
     incorrectOpaque.setLocation(600, 600); 
     incorrectOpaque.setVisible(true); 
     JWindow correctOpaque = createWindow("correct opaque", false); 
     correctOpaque.setLocation(800, 600); 
     correctOpaque.setVisible(true); 
    } 


    private JButton createButton(final boolean opaque) { 
     JButton but = new JButton("Testing") { 

      /** 
      * @inherited <p> 
      * Overridden to take over background painting with 
      * transparent color. 
      */ 
      @Override 
      protected void paintComponent(Graphics g) { 
       if (!isOpaque() && getBackground().getAlpha() < 255) { 
        g.setColor(getBackground()); 
        g.fillRect(0, 0, getWidth(), getHeight()); 
       } 
       super.paintComponent(g); 
      } 

     }; 
     but.setBackground(new Color(0, 0, 0, 100)); 
     but.setForeground(new Color(70, 155, 255)); 
     but.setOpaque(opaque); 
     return but; 
    } 

    private JWindow createWindow(String text, boolean opaque) { 
     JWindow window = new JWindow(); 
     JButton but = createButton(opaque); 
     window.add(but); 
     window.add(new JLabel(""), BorderLayout.SOUTH); 
     window.setOpacity(0.5f); 
     window.setBackground(new Color(0, 0, 0, 0)); 
     window.setSize(new Dimension(200, 100)); 
     return window; 
    } 

    public static void main(String[] Args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 

       new TransparentButton(); 
      } 
     }); 
    } 

    @SuppressWarnings("unused") 
    private static final Logger LOG = Logger.getLogger(TransparentButton.class 
      .getName()); 
} 
+0

अपारदर्शी झूठी सेटिंग करके बटन पृष्ठभूमि पूरी तरह से पारदर्शी हो जाती है (चित्रित नहीं) जो मैं बिल्कुल नहीं चाहता हूं। जब आप अपारदर्शी झूठ बोलते हैं तो पृष्ठभूमि दिखाने के लिए क्या आप मेरी सहायता कर सकते हैं? – Pete

+0

एक आदर्श समाधान, बहुत धन्यवाद। – Pete

0

आप translucency की कोशिश की है?

translucent and shaped window API को पहली बार जावा एसई 6 अपडेट 10 रिलीज में एक निजी एपीआई के रूप में जोड़ा गया था। यह कार्यक्षमता जेडीके 7 रिलीज में सार्वजनिक एडब्ल्यूटी पैकेज में ले जाया गया था।

मुझे लगता है कि उपरोक्त लिंक आपकी मदद कर सकते हैं। जैसा कि आप देख मैं जावा नामकरण के अनुरूप क्षेत्र का नाम बदल दिया:

+0

विंडो पारदर्शी बनाने में कोई समस्या नहीं है। फिक्स होगा कि कैसे घटक (इस मामले में जेबटन) की पेंटिंग को संशोधित करना शामिल है और सीधे विंडो से संबंधित नहीं है। – Pete

+0

हेहेहे ... हाँ, यह सही है! – gumuruh

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