MyTableCellEditor需要向JTable添加覆盖编辑(如Excel单元格)和数据输入规则(parseDouble)。 当用户点击另一个单元格时,为什么单元格会删除用户输入的值? IOW:在单击另一个单元格之前,输入到单元格中的值是可见的,然后它就消失了。 单步执行程序时,当用户编辑单元格值并在单元格编辑完成时调用getCellEditorValue时,将调用getTableCellEditorComponent。
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;
}
}
}
答案 0 :(得分:1)
我想在编辑完成后,该条目将进入模型。因此,从getCellEditorValue()
中获取模型中的值将在编辑之前为您提供值。
相反,您应该使用component.getText()
来获取值。
return Double.parseDouble(component.getText())