2017-07-01 83 views
-1

我想製作一個帶有不透明子項的透明框架的疊加窗口。我在製作透明窗口時很成功,甚至在添加測試孩子時看到它是否成功也是成功的。但是,只要我用我的paintComponent替換測試代碼...我得到一個白色的背景。有人知道爲什麼一旦添加了組件,JFrame就會失去透明度特性

package blahh; 

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*;; 

public class LoadingFrame { 

    public static void main(String[] args) { 
     LoadingFrame Class = new LoadingFrame(); 
     Class.frameChar(); 


    } 

    public void frameChar(){ 
     JFrame frame = new JFrame(); 
     B b = new B(); 


     frame.setUndecorated(true); 
     frame.setBackground(new Color(0, 0, 0, 0)); 
     frame.setAlwaysOnTop(true);  
     frame.setPreferredSize(new Dimension(500, 500)); 
     frame.getContentPane().setLayout(new java.awt.BorderLayout()); 
     frame.setLocationRelativeTo(null);   
     frame.setVisible(true); 
     //frame.getContentPane().add(new JLabel("test code"); 
     frame.add(b); 
     frame.pack(); 
    } 

public class B extends JPanel{ 
    public void paintComponent(Graphics g){ 
      super.paintComponent(g); 
      g.drawRect(0, 0, 100, 100); 


     } 

} 
} 
+1

你的面板是不透明默認情況下,當你構建它時考慮調用'setOpaque(false)' – MadProgrammer

+0

啊,你知道它的人!你是一個天才。謝謝您的幫助! –

回答

2

JPanel是默認不透明,具BorderLayout相結合,這將使其覆蓋整個幀,使其顯得不透明。你需要調用它setOpaque(false),使之通過

JFrame frame = new JFrame(); 
    B b = new B(); 
    b.setOpaque(false); 


    frame.setUndecorated(true); 
    frame.setBackground(new Color(0, 0, 0, 0)); 
    frame.setAlwaysOnTop(true);  
    // I'd prefer to override getPreferredSize of B 
    frame.setPreferredSize(new Dimension(500, 500)); 
    frame.setLocationRelativeTo(null);   
    frame.add(b); 
    frame.pack(); 
    frame.setVisible(true); 

看到的PS你也應該調用setVisible最後如果可能的話,它只是減少了你的組件可能沒有顯示出來隨機

相關問題