2012-02-25 82 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