java - 如何使所有工具提示在 Java 中半透明?

标签 java swing tooltip transparency

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

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));

我知道我的问题可能会变得有些困惑,但我们将不胜感激任何建议。

最佳答案

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

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

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

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

关于java - 如何使所有工具提示在 Java 中半透明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19985185/

相关文章:

c# - 在鼠标悬停在文本上时显示工具提示

java - 使用重新抛出异常的异常处理程序是否有任何明显的区别

java - JOptionPane 多维数组输出

java - 将按钮添加到数组

java - 可以超出其容器边界的自定义组件 - 如何?

java - 如何在 Java Swing 中创建圆形标题边框

css - 工具提示弹出框区域内的 Accordion 不会出现

javascript - 悬停时, Angular 工具提示应保持打开状态

java - m2e:使用 exec-maven-plugin 生成的代码

java - 了解类变量的继承