2009-05-18 54 views
4

有一種方法(例如,通過一個事件?),以確定何時Swing組件變爲「可顯示的」 - 按的Javadoc Component.getGraphics什麼時候Swing組件'可顯示'?

我想這樣做的原因是,這樣我就可以調用getGraphics(),並傳遞給該組件我的「渲染策略」。

我試過增加一個ComponentListener,但是componentShown似乎沒有被調用。還有什麼我可以嘗試?

謝謝。

,另外,是不是OK保持Graphics對象我收到的持有?或者是否有可能在Component的生命週期後期創建新的? (例如,它的大小後/隱藏?)

+0

不保存圖形對象。它可能會因許多原因而改變。 – KitsuneYMG 2009-05-19 14:26:05

回答

3

添加的HierarchyListener

public class MyShowingListener { 
private JComponent component; 
public MyShowingListener(JComponent jc) { component=jc; } 

public void hierarchyChanged(HierarchyEvent e) { 
    if((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED)>0 && component.isShowing()) { 
     System.out.println("Showing"); 
    } 
} 
} 

JTable t = new JTable(...); 
t.addHierarchyListener(new MyShowingListener(t)); 
+1

對於我的問題,這絕對是最好的答案,但我想我會選擇wilums2的調整大小的建議,因爲無論如何,這是我將要聽的一個事件。謝謝。類需要: – 2009-05-18 20:29:11

1

您可以偵聽resize事件。首次顯示組件時,它將從0,0調整到佈局管理器確定的任何內容(如果有)。

0

我一直使用Coomponent.addNotify知道什麼時候該組件已準備好rendered.Not知道,如果是最好的方式,但它爲我工作。當然,您必須對組件進行子類化。

Component.isDisplayable應該是正確的答案,但我知道它不適合我,因爲我認爲它會(我不記得爲什麼,但有一些東西,我切換到addNotify)。

在SUN的源代碼來看,我可以看到火災的addNotify一個HierarchyEvent.SHOWING_CHANGED所以這是通知的最佳途徑。

相關問題