2010-07-22 567 views
1

我有一個使用自定義TableModel來顯示一系列對象實例的JTable。 getValueAt(int row, int column)內有一個開關盒,可以根據給定的屬性返回值(見下文)。一個返回語句涉及將1/0的值作爲真/假返回。在編輯單元格時切換值

是否有一種方法可以修改此TableModel,以便在編輯單元格時顯示1/0?

public Object getValueAt(int row, int column) { 
    User user = (User)dataVector.get(row); 
    switch (column) { 
     case ID_INDEX: 
      return user.getId(); 
     case USERNAME_INDEX: 
      return user.getUserName(); 
     case PASSWORD_INDEX: 
      return "****"; 
     case ACTIVATED_INDEX: 
      return (user.getActivated())?"true":"false"; 
     default: 
      return new Object(); 
    } 
} 

回答

1

default renderer and editor for BooleanJCheckBox。考慮使用

case ACTIVATED_INDEX: 
    return Boolean.valueOf(user.getActivated()); 

或者,

case ACTIVATED_INDEX: 
    return (user.getActivated())?"1":"0"; 

附錄:作爲一個例子,DefaultTableModel不會覆蓋getColumnClass(),和AbstractTableModel簡單地返回Object.class。你TableModel應該重寫getColumnClass()相應:

DefaultTableModel dtm = new DefaultTableModel() { 

    @Override 
    public Class<?> getColumnClass(int col) { 
     return getValueAt(0, col).getClass(); 
    } 
}; 
// add some data 
JTable table = new JTable(dtm); 
+0

謝謝。我使用的TableModel似乎產生了一個簡單的String而不是JCheckBox。從鏈接看來,所使用的渲染器取決於'getColumnClass()'的結果。 – 2010-07-23 08:17:02

+0

@詹姆斯:是的,我已經詳細闡述過了。 – trashgod 2010-07-23 10:39:04

1

你需要看看TableCellRendererTableCellEditor

一個TableCellRenderer負責渲染單元格數據時,它沒有被編輯,其中作爲TableCellEditor負責用於提供用於編輯單元格值的組件。因此,您可以用兩種不同的方式表示數據,具體取決於它是按照正常情況編輯還是僅呈現。

但是,您應該考慮如果您從getValueAt()方法返回布爾類型,那麼當單元格處於編輯模式時,您的JTable應該自動呈現JCheckBox,通過像往常一樣點擊它可以更改JCheckBox值。要做到這一點只是返回:

case ACTIVATED_INDEX: 
    return Boolean.valueOf(user.getActivated()); 
+1

鏈接已更新並更改爲'TableCellRenderer和'TableCellEditor'。 – trashgod 2010-07-22 03:22:54

+0

不用擔心。謝謝。 – S73417H 2010-07-22 05:46:03

相關問題