为什么JTable没有显示用户输入?

时间:2012-05-03 14:06:57

标签: java swing jtable tablecelleditor

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;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我想在编辑完成后,该条目将进入模型。因此,从getCellEditorValue()中获取模型中的值将在编辑之前为您提供值。

相反,您应该使用component.getText()来获取值。

 return Double.parseDouble(component.getText())