2010-11-02 4 views
3

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(); 
    } 
} 
+1

non apparentés, mais pourquoi ne pas vous déclarez simplement 'component' comme un' JTextField' et évitez-vous un tas de casting? –

Répondre

7

setCellEditor(TableCellEditor) définit l'éditeur pour le moment cellule active uniquement (et sera perdu une fois qu'il est vous plus actif. Voulez appeler JTable.setDefaultEditor() pour définir l'éditeur par défaut pour une classe spécifique.

jTable.setDefaultEditor(String.class, tableCellEditor); 

vous pouvez également définir un éditeur pour la colonne à travers le TableColumnModel, par exemple

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

Les deux lignes de code semblent ne rien faire du tout :( Une raison possible? –