【问题标题】:How to set transparent background of JDialog如何设置JDialog的透明背景
【发布时间】:2024-09-25 11:30:02
【问题描述】:

喂,..

如何设置背景透明并“删除”关闭操作(标记为红色)? 我只想出示卡片:-)

谢谢..!

【问题讨论】:

  • 请注意,JDialog、JFrame 和 JApplet 等*容器并非旨在透明。 Sun 的一篇文章中提到了一个允许透明和弯曲窗口(使用 com.sun 类)的 hack,但它停止工作。 Java 7 应该重新引入(到 J2SE 中)半透明/透明 TLC。
  • 我认为这可以帮助你:java.sun.com/developer/technicalArticles/GUI/…

标签: java swing background transparency translucency


【解决方案1】:

虽然 UNDECORATED JFrame 的透明度没有问题(myJFrame.setBackground (new Color (0,0,0,0)); 已经足够漂亮了),但同样的 JDialog 是不行的。

然而,我发现以下序列非常适合 JDialog:

myJDialog.getRootPane ().setOpaque (false);
myJDialog.getContentPane ().setBackground (new Color (0, 0, 0, 0));
myJDialog.setBackground (new Color (0, 0, 0, 0));

A 也仍然存在,但这是我的私人谦虚建议,应针对 UnsupportedOperationException 和 IllegalComponentStateException 尝试所有对 Window 扩展程序(例如 JFrame、JDialog)的 setBackground 调用。

【讨论】:

  • 你先生刚刚成就了我的一天 :)
  • 我认为收到异常并修复它会更好。
  • getContentPane().setBackground 在我的情况下不需要
  • 我收到错误 java.awt.IllegalComponentStateException:对话框在 java.awt.Dialog.setBackground 处装饰。我不得不用myJDialog.setUndecorated(true);替换第二个setBackground
【解决方案2】:

我按照文章中的说明进行操作,最终成功了,而且一点也不难。 :) 我现在有我的半透明 SplashImage ans About 屏幕,它显示 PNG 图像并尊重其(复杂)透明度。太棒了。 请注意,在 JDK 7 中继续执行的方法会有所改变。

请注意关键字之间的区别。 http://download.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html#6u10

如果有就好了

yourDialog.setUndecorated(true);
yourDialog.getRootPane().setOpaque(false);

诡计有效,但对我没有用。也许我做错了什么。

我还注意到使用 setContentPane(Component); 很重要。而不是 getContentPane.add(Component);

我很高兴它现在可以工作了! :)

【讨论】:

  • 作为评论可能会更好。如果对您有帮助,您当然应该支持原始文章链接。
  • 是的,它更像是评论而不是答案。我是这里的新手,我不太了解该网站的组织方式,抱歉。 :) 顺便说一句,我成功的方法是在 windows 下实现半透明,但我在 Linux 下没有 AWTUtilities,所以我不能这样做。
【解决方案3】:

yourDialog.setUndecorated(true)应该为标题栏解决问题。

为了让框架透明。你必须在带有yourDialog.getRootPane().setOpaque(false)的根面板上工作。

【讨论】:

  • 如果我写“setUndecorated”那么它会抛出一个异常:“IllegalComponentStateException:对话框是可显示的”
  • 啊,我现在不在我的开发环境中。我会测试并在我可以将手放在正确的计算机上时回来。
  • 在我可以进行测试之前,您或许应该尝试使用 JWindow(默认情况下未修饰)。您或许还应该看看 Java6 的 SplashScreen 功能。
  • 谢谢.. 我用 JWindow 做的.. 装饰不见了 - 但背景是可见的...... hm
  • 嗨,我已经检查了我们的代码库。我们使用未修饰的 JFrame 作为 AboutBox。图像占据了面板的全部部分并且是矩形的,所以我们没有透明度的问题。正如 Andrew 所说,从今天开始,它将更接近于 hack,而不是其他任何东西让它在今天起作用。如前所述,您也许可以尝试在 SplashScreen (java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/…) 中挖掘,看看您是否可以重复使用某些东西。