2011-04-24 60 views
13

在處理swing組件時,以及在運行時更改組件時,通常需要調用組件上的revalidate()方法以刷新它們。什麼時候需要在swing組件上調用revalidate()來刷新,什麼時候不刷新?

確定是否需要重新驗證組件的規則是什麼?當組件上的某些特定屬性發生更改時,swing會自動調用revalidate(),並且其他屬性不會更改嗎?

+0

請看這裏http://stackoverflow.com/questions/1097366/java-swing-revalidate-vs-repaint – 2011-04-24 10:00:03

+0

@Romain已經閱讀,而不是相同的問題。但是,謝謝 – Datoraki 2011-04-24 10:15:18

+0

很難說因爲有EDT,基本上如果你添加/刪除新的JComponent,那麼你必須調用revalidate()+ repaint(),如果你改變已經可見的JComponent,然後validate()+ repaint(我的視圖重新驗證覆蓋驗證) – mKorbel 2011-04-24 10:32:26

回答

10

基本規則是:從不 - 內部擺動將會照顧它。該規則的基本例外是在運行時添加/刪除組件,或者以系統無法知道或出於某種原因不想知道的方式影響佈局的更改。

儘管異常並不是非常清晰,但在「正常」應用程序開發中的頻率不高:如果需要「經常」調用它,代碼很有可能出現錯誤f.i.不通知其聽衆的自定義模型實現。

+0

好的答案,謝謝=)。另外,從invalidate()javadoc中:「當一個屬性值發生變化時,這個方法將自動被調用,這樣這個組件的大小,位置或者內部佈局都會受到影響。這種自動更新與AWT不同,因爲程序一般不再需要調用驗證來獲取GUI的內容更新。「 – Datoraki 2011-04-24 11:03:49

+0

上述基本規則的改進:如果您要添加子項,請調用revalidate以使混合代碼重置內部狀態。 – BillYork67 2013-04-05 17:29:29