2012-08-28 88 views
2

我有5個不同形式的JTables與任意數量的行,我想有一個標籤爲每個人將顯示該表中的行總數,也改變顏色爲3行數改變時的秒數。如果遞增,顏色應該變爲綠色,如果遞減,顏色應該變爲紅色。什麼是最好的實現這種方式,我不需要在我的每個表單中重複太多的代碼?JTable行總數顏色編碼標籤

+0

如果JTable中是可以擴展的JTable相同,重寫您需要的方法以賦予其額外的功能。 –

+0

@TheCat不,你_不_近似(接近100%)覆蓋任何JSomething。此外,桌子本身與要求無關。 – kleopatra

回答

5

基本上,你一個TableModelListener添加到JTable的模型,並在收到更改事件,更新相應的標籤適當

一些代碼:

public class TableModelRowStorage 
    // extends AbstractBean // this is a bean convenience lass of several binding frameworks 
          // but simple to implement directly 
    implements TableModelListener { 

    private int rowCount; 

    public TableModelRowStorage(TableModel model) { 
     model.addTableModelListener(this); 
     this.rowCount = model.getRowCount(); 
    } 
    @Override 
    public void tableChanged(TableModelEvent e) { 
     if (((TableModel) e.getSource()).getRowCount() != rowCount) { 
      int old = rowCount; 
      rowCount = ((TableModel) e.getSource()).getRowCount(); 
      doStuff(old, rowCount); 
     } 

    } 

    protected void doStuff(int oldRowCount, int newRowCount) { 
     // here goes what you want to do - all in pseudo-code 
     // either directly configuring a label/start timer 
     label.setText("RowCount: " + newRowCount); 
     label.setForeground(newRowCount - oldRowCount > 0 ? Color.GREEN : Color.RED); 
     timer.start(); 

     // or indirectly by firing a propertyChange 
     firePropertyChange("rowCount", oldRowCount, newRowCount); 
    } 

} 
+2

'AbstractBean'是一個SwingX類。也許你應該用'PropertyChangeSupport'來重寫這段代碼片段,儘管代碼的目的是明確的 – Robin

+0

@Robin ..它是半僞代碼。有罪不提,:) – kleopatra