2017-08-04 33 views
0

我有一個JPanel,我把組件它。每當子組件(甚至是嵌套)被重新繪製時,我都需要得到通知。是否有一個事件可以在組件添加到JPanel時註冊?如何檢測JPanel子組件繪畫事件?

我的目的是在JPanel的右邊和下邊畫一個滾動條,但是當重新繪製子組件時,它重疊滾動條並使滾動條的一部分不可見。我想在組件刷新視圖時重新繪製滾動條,以便它保留在滾動條的後面。

爲了使它一點點清晰,這兩個是用戶界面的屏幕截圖。

When components overlay the scroll bar When scroll bar overlays the components

第一個圖像是不正確,但這種情況只有當我將鼠標懸停鼠標的組件。否則,它看起來不錯。右側的圖像是容器加載時的圖像。我希望組件總是出現在滾動條的後面,但我無法檢測到特定組件是否重新繪製。

+0

,你可以添加一個'ComponentListener'看到http://docs.oracle.com/javase/7/docs/api/java/awt/event/ComponentListener.html - 這個監聽器會通知時組件已調整大小,隱藏/顯示und移動 –

+0

@MartinFrank True Martin。但重新粉刷不屬於任何這些事件。我嘗試過使用它。 – OmerHalit

+0

你的組件如何不在滾動窗格的視圖端口內? –

回答

0

對於那些誰遇到類似的問題,這樣,

我發現內擺動自己的繪畫機制答案。如果你想從一個容器的孩子收到組分漆事件,覆蓋isPaintingOrigin()方法。

@Override 
protected boolean isPaintingOrigin() { 
    return true; 
} 

只有這樣才足夠,繪畫事件將被底層容器調用。