【问题标题】:How to make all tooltips semi-transparent in Java?如何在 Java 中使所有工具提示半透明?
【发布时间】:2013-11-14 18:13:43
【问题描述】:

我已经设法使用 UIManager 制作半透明的工具提示,并使用 4 个参数创建颜色:

UIManager.put("ToolTip.background",new Color(0x40,0x51,0x67,0x40));

但是有一个问题 - 实际上有两个问题:出现在屏幕上的第一个工具提示总是忽略透明度,而且 - 不幸的是 - 窗口框架之外的工具提示也是如此。据我所知(并从我能找到的唯一一条信息来看),这是因为一些工具提示是重量级的而不是轻量级的,这就是为什么他们出于某种原因忽略了我的颜色设置。虽然我可以设法让工具提示的内容离边界足够远,但这似乎是解决此问题的一种廉价方法,并且由于某种原因它仍然无法覆盖第一个显示为白色的工具提示。

所以,一个无知的新手问:有没有一种简单的方法可以让重量级工具提示变得透明,而无需让我自己的类扩展 PopupFactory 和 Popup?如果没有,如果我决定创建新类并将默认的 PopupFactory 替换为:

PopupFactory.setSharedInstance(new MyPopupFactory());

另外,出于纯粹的好奇心,因为它涉及工具提示:为什么会这样......

UIManager.put("ToolTip.background",new Color(0x40,0x51,0x67);

...替换 ToolTip.background 和 ToolTip.backgroundInactive,而当我使用 ColorUIResource 时,我必须编写两个单独的命令:

UIManager.put("ToolTip.background",new ColorUIResource(0x60,0x6a,0x76));
UIManager.put("ToolTip.backgroundInactive",new ColorUIResource(0x60,0x6a,0x76));

我知道我的问题可能有点混乱,但任何建议都将不胜感激。

【问题讨论】:

  • "..任何建议将不胜感激。" 将工具提示保留为纯色,并将分配给它的时间投入到实际的改进中 b> 到应用程序。 (与“kewl eye candy”相反)。

标签: java swing tooltip transparency


【解决方案1】:

重量级组件的透明度无法按预期工作是正常的 - 尽管某些平台支持窗口透明度,但 swing 不直接支持。

您可以利用 com.sun.awt.AWTUtilities(显然不能移植到其他虚拟机)使窗口透明(参见这篇文章:https://today.java.net/pub/a/today/2008/03/18/translucent-and-shaped-swing-windows.html)。

看一下PopupFactory的JRE源码。您可以调用 setPopupType(2) 使工厂更喜欢重量级弹出窗口。该方法不可见,因此您需要使用反射来调用它。这是一个 hack,你不能确定它在未来是否会起作用。

由于 Swing 不通过其标准 API 支持它,因此最明智的选择可能是在不支持透明效果的情况下不使用它们。如果您想要统一的外观,可能根本不使用透明度。

【讨论】:

  • “使用 hack 或不要全部使用”不是我预期的答案,但是嘿 - 至少现在我知道了。好的,谢谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 2015-12-02
  • 1970-01-01
  • 2017-05-28
  • 2014-09-30
相关资源
最近更新 更多