¿Por qué JTable no muestra la entrada del usuario?

MyTableCellEditor necesita agregar edición de sobrescritura (como una celda de Excel) y reglas de entrada de datos (parseDouble) a JTable. ¿Por qué la celda borra el valor ingresado por el usuario cuando el usuario hace clic en otra celda? IOW: el valor que se ingresa en una celda es visible hasta que se hace clic en otra celda, luego desaparece. Recorriendo el programa, se llama a getTableCellEditorComponent cuando el usuario edita un valor de celda y se llama a getCellEditorValue cuando se completa la edición de celda.

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

preguntado el 03 de mayo de 12 a las 15:05

1 Respuestas

Supongo que la entrada se realiza en el modelo después de que se completa la edición. Así que obtener el valor del modelo en getCellEditorValue() le dará el valor antes de la edición.

En su lugar, deberías usar component.getText() para obtener el valor.

 return Double.parseDouble(component.getText())

contestado el 03 de mayo de 12 a las 15:05

Exacto así. Un millón de gracias. - Jacknad

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.