0

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

1 に答える 1

1

モデルへのエントリーは編集が終わってからかな。したがって、モデルから値を取得するgetCellEditorValue()と、編集前の値が得られます。

代わりにcomponent.getText()、値をフェッチするために使用する必要があります。

 return Double.parseDouble(component.getText())
于 2012-05-03T14:22:39.813 に答える