Nieprzezroczyste komponenty na przezroczystych oknach Java
Udało mi się uczynić okna java przezroczystymi, ale mam problem z nakładaniem nieprzezroczystych komponentów na te okna. JFrame.setOpacity (0) i AWTUtilities setWindowOpacity przenoszą przezroczystość na komponenty składowe. Ponadto JFrame.setBackground (0,0,0,0) w jakiś sposób przenika przezroczystość wspomnianym komponentom.
Jak mogę to naprawić?
klasy testowe: odpowiednio przezroczyste tło, setOpacity i AWTUtility
<code>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); } } </code>
EDYCJA: Spróbowałem setBackground (0,0,0,0) w Windows, gdzie to działa, ale nie działa poprawnie na Linuksie (xfce).