2010-08-25 99 views
2

已發佈CellEditor。不保存單元格的值

import java.awt.Component; 
import javax.swing.AbstractCellEditor; 
import javax.swing.JComponent; 
import javax.swing.JTable; 
import javax.swing.JTextField; 
import javax.swing.table.TableCellEditor; 

public class UserCellEditor extends AbstractCellEditor 
          implements TableCellEditor { 

    JComponent component = new JTextField(); 

    public Object getCellEditorValue() { 
     return ((JTextField) component).getText(); 
    } 

    public Component getTableCellEditorComponent(JTable table, 
      Object value, boolean isSelected, int row, int column) { 
     ((JTextField) component).setText((String) value); 
     return component; 
    } 
} 

然後我打電話表方法以這樣的方式:

UserTable.getColumnModel().getColumn(0).setCellEditor(new UserCellEditor()); 

該單元正被編輯,但通過按Enter鍵或移動到另一個小區沒有被存儲的結果,它返回原來值。

我錯在哪裏或者我做錯了什麼?

+0

看起來不錯,類似於在exampledepot.com中看到的代碼,或許表格代碼中有錯誤? – PhiLho 2010-08-25 12:10:54

+0

重新格式化的代碼;如果不正確請回復。 – trashgod 2010-08-25 13:58:05

+0

在我的模型表中還沒有被重寫的方法setValueAt :( – Andrey 2010-08-26 01:14:02

回答

2

看起來您正在編輯本地JTextField中的值,而編輯完成後,您的數據模型隨後會返回未更改的值。您的編輯器需要更新您的模型,如example中所述。

0

如果您要爲列設置CustomTableCellEditor,那麼必須在相應TableModel的setValueAt(Object o, int row, int column)中更新該列,如果您不這樣做,則永遠不會更新新值。通過如果你定義CustomTableCellEditor這樣的方式:

public class CustomTableCellEditor extends AbstractCellEditor implements TableCellEditor

你不會需要自己觸發事件。

相關問題