L'intention de MyTableCellEditor est de faire qu'une cellule JTable se comporte comme une cellule Excel, IOW, en entrant une valeur après qu'un simple clic dans une cellule écrase plutôt qu'ajoute à la valeur existante. Je ne m'attendais pas à ce que le code suivant fonctionne sur le premier passage, mais je m'attendais à être touché par les points d'arrêt de débogage dans getTableCellEditorComponent et getCellEditorValue. Pourquoi getTableCellEditorComponent ou getCellEditorValue n'est-il pas appelé lorsque j'utilise jTable?Java: Pourquoi JTable n'utilise-t-il pas TableCellEditor?
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();
}
}
non apparentés, mais pourquoi ne pas vous déclarez simplement 'component' comme un' JTextField' et évitez-vous un tas de casting? –