2013-11-14 28 views
1

我已經成功地使使用UIManager的,創造顏色半透明提示有4個參數:如何使所有工具提示在Java中都是半透明的?

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

我知道我的問題可能會變得有點混亂,但任何建議將不勝感激。

+1

*「..任何意見將不勝感激。」*保持工具提示爲純色,並將分配的時間投入到實際的**改進**應用程序。 (而不是'乖巧的眼睛糖果')。 –

回答

5

透明度不像預期的那樣用重量級組件正常工作 - 窗口透明度雖然受某些平臺支持,但不直接受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)讓工廠更喜歡重量級的彈出窗口。該方法不可見,所以您需要使用反射來調用它。這是一個黑客,你不能確定它將在明天工作。

由於Swing不支持通過其標準API,所以最明智的選擇可能是在不支持透明度效果的地方使用透明度效果。如果你想要一個統一的外觀,可能根本不使用透明度。

+0

'使用黑客或不使用它'不是我期望的答案,但嘿 - 至少現在我知道。好的,謝謝你的幫助。 – JustACluelessNewbie