java jtable tablecelleditor

Java: ¿Por qué JTable no usa TableCellEditor?



java jtable cell editor (1)

La intención de MyTableCellEditor es hacer que una celda JTable se comporte como una celda de Excel, IOW, ingrese un valor después de que el simple clic en una celda se sobrescribe en lugar de agregarse al valor existente. No esperaba que el siguiente código funcionara en la primera pasada, pero sí esperaba obtener puntos de corte de depuración en getTableCellEditorComponent y getCellEditorValue. ¿Por qué no se llaman getTableCellEditorComponent o getCellEditorValue cuando uso jTable?

public class MyTable extends javax.swing.JFrame implements TableModelListener { private static final MyTableCellEditor tableCellEditor = new MyTableCellEditor(); ... public MyTable() { initComponents(); jTable.getModel().addTableModelListener(MyTable.this); ... private void initComponents() { // Generated by the Form Editor. jTable = new javax.swing.JTable(); jTable.setCellEditor(tableCellEditor); ... public class MyTableCellEditor extends AbstractCellEditor implements TableCellEditor { JComponent component = new JTextField(); public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int rowIndex, int vColIndex) { if (isSelected) { ((JTextField)component).selectAll(); } ((JTextField)component).setText((String)value); return component; } public Object getCellEditorValue() { return ((JTextField)component).getText(); } }


setCellEditor(TableCellEditor) configura el editor para la celda activa actualmente (y se perderá una vez que ya no esté activo. Desea llamar a JTable.setDefaultEditor() para establecer el editor predeterminado para una clase específica.

jTable.setDefaultEditor(String.class, tableCellEditor);

Alternativamente, puede establecer un editor para la columna a través de TableColumnModel , por ejemplo

jTable.getColumnModel().getColumn(1).setCellEditor(tableCellEditor);