2011-08-12 11 views

उत्तर

5

कृपया ट्यूटोरियल How to Create Translucent, How to Create Translucent and Shaped Windows, तो javax.swing.Timer का उपयोग करके पढ़ा (उदाहरण के लिए)

import java.awt.event.*; 
import java.awt.Color; 
import java.awt.AlphaComposite; 
import javax.swing.*; 
import javax.swing.UIManager.LookAndFeelInfo; 

public class ButtonTest { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new ButtonTest().createAndShowGUI(); 
      } 
     }); 
    } 
    private JFrame frame; 
    private JButton opaqueButton1; 
    private JButton opaqueButton2; 
    private SoftJButton softButton1; 
    private SoftJButton softButton2; 

    public void createAndShowGUI() { 

     opaqueButton1 = new JButton("Opaque Button"); 
     opaqueButton2 = new JButton("Opaque Button"); 
     softButton1 = new SoftJButton("Transparent Button"); 
     softButton2 = new SoftJButton("Transparent Button"); 
     opaqueButton1.setBackground(Color.GREEN); 
     softButton1.setBackground(Color.GREEN); 
     frame = new JFrame(); 
     frame.getContentPane().setLayout(new java.awt.GridLayout(2, 2, 10, 10)); 
     frame.add(opaqueButton1); 
     frame.add(softButton1); 
     frame.add(opaqueButton2); 
     frame.add(softButton2); 
     frame.setSize(567, 350); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
     Timer alphaChanger = new Timer(30, new ActionListener() { 

      private float incrementer = -.03f; 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       float newAlpha = softButton1.getAlpha() + incrementer; 
       if (newAlpha < 0) { 
        newAlpha = 0; 
        incrementer = -incrementer; 
       } else if (newAlpha > 1f) { 
        newAlpha = 1f; 
        incrementer = -incrementer; 
       } 
       softButton1.setAlpha(newAlpha); 
       softButton2.setAlpha(newAlpha); 
      } 
     }); 
     alphaChanger.start(); 
     Timer uiChanger = new Timer(3500, new ActionListener() { 

      private LookAndFeelInfo[] laf = UIManager.getInstalledLookAndFeels(); 
      private int index = 1; 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       try { 
        UIManager.setLookAndFeel(laf[index].getClassName()); 
        SwingUtilities.updateComponentTreeUI(frame); 
       } catch (Exception exc) { 
        exc.printStackTrace(); 
       } 
       index = (index + 1) % laf.length; 
      } 
     }); 
     uiChanger.start(); 
    } 

    public static class SoftJButton extends JButton { 

     private static final JButton lafDeterminer = new JButton(); 
     private static final long serialVersionUID = 1L; 
     private boolean rectangularLAF; 
     private float alpha = 1f; 

     public SoftJButton() { 
      this(null, null); 
     } 

     public SoftJButton(String text) { 
      this(text, null); 
     } 

     public SoftJButton(String text, Icon icon) { 
      super(text, icon); 

      setOpaque(false); 
      setFocusPainted(false); 
     } 

     public float getAlpha() { 
      return alpha; 
     } 

     public void setAlpha(float alpha) { 
      this.alpha = alpha; 
      repaint(); 
     } 

     @Override 
     public void paintComponent(java.awt.Graphics g) { 
      java.awt.Graphics2D g2 = (java.awt.Graphics2D) g; 
      g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha)); 
      if (rectangularLAF && isBackgroundSet()) { 
       Color c = getBackground(); 
       g2.setColor(c); 
       g.fillRect(0, 0, getWidth(), getHeight()); 
      } 
      super.paintComponent(g2); 
     } 

     @Override 
     public void updateUI() { 
      super.updateUI(); 
      lafDeterminer.updateUI(); 
      rectangularLAF = lafDeterminer.isOpaque(); 
     } 
    } 
} 
+0

मैं कोड की कोशिश की, यह _glass_ फ्रेम (धागा स्टार्टर से उदाहरण में दिखाया गया की तरह) के साथ कोई संबंध नहीं है, यह सिर्फ बटन विभिन्न रंगों में झपकी बनाता है। – trinity420

1

शायद this blog post आप और अधिक मदद मिलेगी संभव है। लेखक एक दृष्टिकोण का वर्णन करता है जहां उसने पूरे विंडोज एयरो प्रभाव का पुनर्निर्माण किया। यहाँ अपने काम कर उदाहरण है:

Screenshots of working example http://www.centigrade.de/en/blog/wp-content/uploads/FrostedGlass-Result.png

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