2012-02-25 117 views
2

可能重複:
Java Swing revalidate() vs repaint()的Java Swing組件刷新

我工作的數據庫應用程序(Java +的Oracle 11g),我需要知道什麼,爲什麼我需要重新驗證/重繪以獲得正確的顯示。我有以下組件:

 JFrame { 
      JCardPanel{ 
      //card1: 
      JPanel { 
       JScrollPane1 { 
        { JTable1 } 
       } 
       JScrollPane2 { 
        { JTable2 } 
       } 
      } 
      //card2: 
      JDialog{ 
       (login window) 
      } 
     } 

「嵌套」按此順序。 JTables的內容經常變化,我不知道如何正確顯示它們 - 我不是揮杆專家,所以有人可以給我一個提示,我需要刷新什麼,如何去做,並解釋發生了什麼。

+3

'爲什麼我需要重新驗證/重新繪製...'在這種情況下從來沒有 – mKorbel 2012-02-25 21:59:58

回答

6

如果您的TableModels已經正確創建,那麼您所要做的就是更新模型中的數據,並且視圖將顯示更改。如果您使用DefaultTableModel,這將被照顧。如果您使用基於AbstractTableModel的模型,則在對模型進行任何更改之後,必須小心地調用適當的fireTableXXX(...)方法。 AbstractTableModel API將向您展示更多關於這些方法的內容,JTable tutorial也會更詳細地介紹這些方法。

+2

擊敗我吧,+1 – Jeffrey 2012-02-25 19:42:49

3

除了之前有關更新模型的建議之外,我還會補充一點,如果您的表被修改,以至於有數千行一次添加/刪除,那麼在更新表之後通過調用fireTableDataChanged()可以節省一些額外的繪製散裝。

+0

ehhh ...否:散裝或不散裝,只要修改是閉區塊,則更具體火方法更好(允許表保持狀態,如fi選擇) – kleopatra 2012-02-26 11:10:42