java - 如何在 Java 中使轻量级 Swing 或 AWT 组件半透明

标签 java swing awt transparency

前段时间,我尝试为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/

相关文章:

java - Logback:仅将 Log4j 中的错误记录到文件

java - Java Web 应用程序中的 MongoDB 配置

java - 从 MySQL 多线程 Java 获取响应

java - 是否可以使用 Firebase Admin SDK 将消息发送到 FCM 客户端的一批 token ?

java - 关于如何将文本字段中的内容添加到 JList 中

Java画线并按键改变颜色

java - 如何制作一个像网络中那样的特定组合框?

java - 全屏尺寸及其前面的框架

java - 隐写术程序给出奇怪的结果

java - 为什么屏幕不变色?