MyTableCellEditor は、上書き編集 (Excel セルのような) とデータ入力規則 (parseDouble) を JTable に追加する必要があります。ユーザーが別のセルをクリックすると、ユーザーが入力した値がセルから消去されるのはなぜですか? IOW: セルに入力された値は、別のセルがクリックされるまで表示され、その後消えます。プログラムをステップ実行すると、ユーザーがセル値を編集すると getTableCellEditorComponent が呼び出され、セルの編集が完了すると getCellEditorValue が呼び出されます。
public class MyTableFrame extends javax.swing.JFrame
implements TableModelListener {
private static TableColumn column2;
public MyTableFrame() {
initComponents();
...
column2 = jTable.getColumnModel().getColumn(2);
column2.setCellEditor(new MyTableCellEditor());
jTable.getModel().addTableModelListener(this);
}
}
public class MyTableCellEditor extends AbstractCellEditor implements
TableCellEditor {
// Component to handle the editing of a cell value
private JTextField component = new JTextField();
// Return value
private Object value;
private DefaultTableModel model;
private int rowIndex;
private int columnIndex;
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int rowIndex, int columnIndex) {
model = (DefaultTableModel) table.getModel();
this.value = value;
this.rowIndex = rowIndex;
this.columnIndex = columnIndex;
component.setText("");
return component;
}
public Object getCellEditorValue() {
try {
return Double.parseDouble(model.getValueAt(rowIndex, columnIndex)
.toString());
} catch (Exception ex) {
return value;
}
}
}