2013-02-18 20 views
13

JFrame saydamını saydamlaştırmak istiyorum, ancak üstündeki resim saydam değil.Şeffaf bir JFrame nasıl oluşturulur, ancak diğer her şey aynı mı?

enter image description here

kimse sadece JFrame saydam yapmak için bir yol biliyor mu: Bu şimdi ne var?

import javax.swing.*; 
import java.awt.*; 
import com.sun.awt.AWTUtilities; 
import static java.awt.GraphicsDevice.WindowTranslucency.*; 

public class SplashDemo extends JFrame 
{ 
    public SplashDemo() 
    { 
     setUndecorated(true); 
     setSize(200, 200); 

     add(new JLabel(new ImageIcon("puppy2.png"))); 
     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     setVisible(true); 

     setOpacity(0.85f);  
    } 

    public static void main(String[] args) 
    { 
     new SplashDemo(); 
    } 
} 
+1

enter image description here

çerçeve şeffaf olun. İçerik bölmesinin yarı saydam olmasına ve içeriğin opak olması için – MadProgrammer

cevap

26

Temel olarak, şeffaf bir pencere ve yarı saydam bir içerik bölmesini yapmak gerekir:

İşte benim kod. İçerik bölmesine eklenir Bu anlamına gelecektir şey ... ek alphering yerine getirilmesi mümkün devam edecektir

public class TranscluentWindow { 

    public static void main(String[] args) { 
     new TranscluentWindow(); 
    } 

    public TranscluentWindow() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        try { 
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
        } catch (Exception ex) { 
        } 

        JWindow frame = new JWindow(); 
        frame.setAlwaysOnTop(true); 
        frame.addMouseListener(new MouseAdapter() { 
         @Override 
         public void mouseClicked(MouseEvent e) { 
          if (e.getClickCount() == 2) { 
           SwingUtilities.getWindowAncestor(e.getComponent()).dispose(); 
          } 
         } 
        }); 
        frame.setBackground(new Color(0,0,0,0)); 
        frame.setContentPane(new TranslucentPane()); 
        frame.add(new JLabel(new ImageIcon(ImageIO.read(getClass().getResource("/Puppy.png"))))); 
        frame.pack(); 
        frame.setLocationRelativeTo(null); 
        frame.setVisible(true); 
       } catch (IOException ex) { 
        ex.printStackTrace(); 
       } 

      } 
     }); 
    } 

    public class TranslucentPane extends JPanel { 

     public TranslucentPane() { 
      setOpaque(false); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 

      Graphics2D g2d = (Graphics2D) g.create(); 
      g2d.setComposite(AlphaComposite.SrcOver.derive(0.85f)); 
      g2d.setColor(getBackground()); 
      g2d.fillRect(0, 0, getWidth(), getHeight()); 

     } 

    } 

} 
+1

Wow'a yardımınız için çok teşekkür ederim. Bu çok mu çalıştı? Araştırma yapmak için çok zaman harcadın gibi görünüyor. – r1nzler

+3

Nope - Her zaman böyle şeyler yapın;) – MadProgrammer

+2

+1, cool. JDK7 ile fazla oynamadı. Üst düzey bir pencereyi şeffaflaştırmanın çok kolay olduğunu anlayamadım. Yapmanız gereken tek şey, bir trasparent arka plan Rengi kullanmak. – camickr

İlgili konular