2013-07-19 29 views
3

當我JCheckboxes或JScrollPane中(施加到保持所有其它部分中,以便產生一個可滾動窗口中的主要成分)一起使用與使用故障重繪(使用自定義的背景色時擺動部件)

component.setBackground(new Color(R, G, B, A)); 
部件

來定義它們的背景顏色,我得到一些討厭的重繪()問題。將鼠標懸停在JCheckboxes上將激活MouseListener,並且JCheckbox的背景將突然顯示窗口的隨機其他部分。即使將鼠標從JCheckbox中取出,此操作仍然存在。

問題使用

JCheckbox.setRollOverEnabled(false); 

但時選擇複選框時仍然會出現消失!

該滾動窗格也不能正確重繪。只有當可見框架外部的部件回到框架時,纔會在滾動方向上連續多次繪製。當程序崩潰時,它看起來類似於Windows操作系統上的錯誤,您可以在屏幕上「畫」窗口,因爲它每次移動它時都會「生成」一個新窗口(http://i.stack.imgur.com/L5G5Q.png)。

最有趣的部分是,當我使用

Color.grey (or any other pre-generated color) 

時不選擇自定義背景色,在所有它也消失了問題完全消失。

那麼在這裏隱藏的revalidate()和repaint()有什麼問題嗎?自Color.AnyColor起作用以來,是否使用RGBA是一個問題,特別是A(=不透明度)部分?

回答

4

是採用RGBA的問題,特別是A(=不透明度)部分

是的,看到Backgrounds With Transparency的解釋和解決方案。

+0

非常感謝!就在我檢查你的答案之前,我可以確認它。將不透明度設置爲最大值(255)將徹底解決此問題。 – ChrisK