前段时间,我尝试为Swing/AWT组件实现半透明的方法,现在才第一次尝试。然而,在实现过程中,UI 中出现了一些问题。该方法的代码如下:
public static void setTransparency(Component comp, float t)
{
try
{
if (comp instanceof Window)
{
try
{
//For JDK 1.7
((Window) comp).setOpacity(t);
}
catch (Throwable th)
{
System.err.println("JRE may be less than 1.7!");
if (!th.getClass().isInstance(new NoSuchMethodError()))
th.printStackTrace();
try
{
//For JDK 1.6
com.sun.awt.AWTUtilities.setWindowOpacity((Window) comp, t);
}
catch (Throwable th1)
{
throw new UnsupportedOperationException("It seems that transparency is not supported", th1);
}
}
}
else
{
if (comp instanceof JComponent)
((JComponent)comp).setOpaque(false);
Graphics2D g2 = (Graphics2D) comp.getGraphics().create();
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, t));
comp.paint(g2);
g2.dispose();
}
}
catch (Throwable th)
{
throw new UnsupportedOperationException("Transparency might not be supported", th);
}
}
运行时,组件的外观不会改变。 是否有人建议将 Swing 或 AWT 组件设为半透明且 100% 可靠?这仅适用于轻量级组件,因为重量级透明度是单独覆盖的并且 100% 可靠,如上所示。 p>
最佳答案
啊,那么您可能想看看 JLayer(或 < Java 1.7 的 JXLayer)以获得透明度。
请参阅tutorial
关于java - 如何在 Java 中使轻量级 Swing 或 AWT 组件半透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8515510/