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

如何在Java中使所有工具提示半透明?,java,swing,tooltip,transparency,Java,Swing,Tooltip,Transparency,我已经使用UIManager制作了半透明的工具提示,并使用4个参数创建了颜色: UIManager.put("ToolTip.background",new Color(0x40,0x51,0x67,0x40)); 但有一个问题——事实上有两个问题:屏幕上出现的第一个工具提示总是忽略透明度,不幸的是,窗口框架外的工具提示也是如此。据我所知(从我能找到的唯一信息来看),这是因为一些工具提示是重量级的,而不是轻量级的,这就是为什么它们出于某种原因忽略了我的颜色设置。虽然我可以设法使我的工具提示与边

我已经使用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));

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

透明性在重量级组件上无法正常工作-窗口透明性虽然得到一些平台的支持,但swing不直接支持

您可以使用com.sun.awt.AWTUtilities(显然不可移植到其他VM)使windows透明(请参阅本文:)

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


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

透明度在重量级组件上无法按预期工作是正常的-窗口透明度虽然受到某些平台的支持,但swing不直接支持

您可以使用com.sun.awt.AWTUtilities(显然不可移植到其他VM)使windows透明(请参阅本文:)

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


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

“使用黑客或不要全部使用”并不是我所期望的答案,但嘿,至少现在我知道了。好吧,谢谢你的帮助。“使用黑客或不要全部使用”不是我期望的答案,但嘿——至少现在我知道了。好的,谢谢你的帮助。”…任何建议都将不胜感激。”将工具提示保留为纯色,并将分配给它的时间投入到应用程序的实际改进中。(与“kewl eye candy”相反。)。任何建议都将不胜感激。将工具提示保留为纯色,并将分配给它的时间投入到应用程序的实际改进中。(与“kewl眼睛糖果”相反)。