2010-08-25 8 views
2

Publié CellEditor.Ne conserve pas la valeur de la cellule

import java.awt.Component; 
import javax.swing.AbstractCellEditor; 
import javax.swing.JComponent; 
import javax.swing.JTable; 
import javax.swing.JTextField; 
import javax.swing.table.TableCellEditor; 

public class UserCellEditor extends AbstractCellEditor 
          implements TableCellEditor { 

    JComponent component = new JTextField(); 

    public Object getCellEditorValue() { 
     return ((JTextField) component).getText(); 
    } 

    public Component getTableCellEditorComponent(JTable table, 
      Object value, boolean isSelected, int row, int column) { 
     ((JTextField) component).setText((String) value); 
     return component; 
    } 
} 

J'appeler la méthode de table de telle façon:

UserTable.getColumnModel().getColumn(0).setCellEditor(new UserCellEditor()); 

La cellule est en cours de modification, mais le résultat en appuyant sur la Enter touche ou de passer à une autre cellule ne sont pas stockées, elle renvoie l'original valeur.

Où est-ce que je me trompe ou que je fais mal?

+0

Looks OK, semblable au code vu, par exemple, dans exampledepot.com, peut-être qu'il y a une erreur dans le code de la table? – PhiLho

+0

Code reformaté; s'il vous plaît revenir si incorrect. – trashgod

+0

Dans ma table de modèle n'a pas été substituée la méthode setValueAt :( – Andrey

Répondre

2

Il semble que vous modifiiez la valeur dans un JTextField local, alors que votre modèle de données renvoie par la suite la valeur inchangée lorsque l'édition est terminée. Votre éditeur doit mettre à jour votre modèle, comme suggéré dans ce example.

0

Si vous définissez un CustomTableCellEditor pour une colonne, cette colonne doit être mise à jour dans le setValueAt(Object o, int row, int column) du TableModel correspondant, si vous ne le faites pas, la nouvelle valeur n'est jamais mise à jour. En passant, si vous définissez votre CustomTableCellEditor cette façon:

public class CustomTableCellEditor extends AbstractCellEditor implements TableCellEditor

Vous aurez pas besoin de déclencher des événements par vous-même.