我已經成功地讓java窗口透明,但是我在將不透明的組件添加到這些窗口上方時遇到了麻煩。 JFrame.setOpacity(0)和AWTUtilities setWindowOpacity都將透明度轉換爲構成組件。另外,JFrame.setBackground(0,0,0,0)以某種方式向所述組件泄露透明度。透明Java窗口上的不透明組件
我該如何解決這個問題?
測試類:透明背景,setOpacity和AWTUtility,分別
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Color;
public class test {
public static void main(String[] args){
JFrame frame = new JFrame("test");
JLabel label = new JLabel("Label text");
frame.setUndecorated(true);
frame.setBackground(new Color(0,0,0,128));
frame.add(label);
frame.pack();
frame.setVisible(true);
}
}
public class test2 {
public static void main(String[] args){
JFrame frame = new JFrame("test");
JLabel label = new JLabel("Label text");
frame.setUndecorated(true);
frame.setOpacity(.50f);
frame.add(label);
frame.pack();
frame.setVisible(true);
}
}
import com.sun.awt.AWTUtilities;
import java.lang.reflect.Method;
import java.awt.Window;
public class test3 {
public static void main(String[] args){
JFrame frame = new JFrame("test");
JLabel label = new JLabel("Label text");
frame.setUndecorated(true);
try {
Class<?> awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities");
Method mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity", Window.class, float.class);
mSetWindowOpacity.invoke(null, frame, Float.valueOf(0.50f));
} catch (Exception x){}
frame.add(label);
frame.pack();
frame.setVisible(true);
}
}
編輯:我試過的setBackground(0,0,0,0)在Windows上,它的工作原理,但它不」 t在Linux(xfce)上正常工作。
爲了更好地幫助越早,張貼[SSCCE](http://sscce.org/)。 –