2009-01-26 15 views
3

Je travaille avec Java, et j'essaye de rendre une cellule dans JTable pour être éditable. Ma classe implémente TableModel et étend AbstractTableModel (pour que je puisse utiliser la méthode fireTableCellUpdated(rowIndex, columnIndex)), et je l'ai mis en œuvre les méthodes isCellEditable() et setValueAt(). Je représente une seule cellule dans le tableau comme un objet deRendre une cellule dans un JTable modifiable - la valeur par défaut de la cellule

Cell classe. Maintenant, voici mon problème: la cellule est déjà modifiable, et quand je clique dessus, le curseur apparaît dans la cellule, cependant, il y a aussi une chaîne dans la cellule comme ceci: [email protected] Je supprime cette chaîne et mets la valeur dans la cellule, que je veux mettre, puis cliquez sur Entrée et ça fonctionne bien, mais je veux quand je clique sur la cellule là pour apparaître rien, une chaîne vide, et non [email protected] Et je ne sais pas comment définir cette chaîne vide par défaut et où

La classe My Cell stocke des informations (caractéristiques) sur la couleur de cellule de la cellule et sa valeur en tant que variables d'instance.

S'il vous plaît dites-moi si vous avez besoin de plus d'informations.

Répondre

1

Utilisez-vous un TableCellEditor approprié pour afficher le composant à modifier?

class MyTableCellEditor 
     extends DefaultCellEditor 
{ 
    @Override 
    public Component getTableCellEditorComponent(
      JTable table, 
      Object value, 
      boolean isSelected, 
      int row, 
      int column) 
    { 
     final JTextField c = (JTextField) super.getTableCellEditorComponent(
      table, 
      ((Cell) value).text, // edit the text field of Cell 
      isSelected, 
      row, 
      column); 

     c.selectAll(); // automatically select the whole string in the cell 
     return c; 
    } 
} 

Vous devrez indiquer à votre table d'utiliser cet éditeur de cellule personnalisé, en plus du rendu de cellule personnalisé.

myTable.setDefaultEditor(Cell.class, new MyTableCellEditor()); 
7

Avez-vous fixé un TableCellRenderer et TableCellEditor pour votre JTable?

Pour afficher une cellule, le TableCellRenderer est utilisé pour rendre le contenu d'un emplacement de la TableModel. Par défaut, il utilisera la méthode toString du Object à cet emplacement, ce qui expliquerait le [email protected] affiché dans la cellule - c'est le résultat de la méthode toString appelée sur votre objet Cell.

En écrivant un moteur de rendu de cellule personnalisé (une classe qui implémente TableCellRenderer), vous serez en mesure de retourner un Component que vous souhaitez utiliser pour afficher l'objet Cell, en utilisant la méthode getTableCellRendererComponent. Dans votre cas, vous voudrez peut-être sous-classer un JLabel qui implémente TableCellRenderer et définira le contenu de l'étiquette pour refléter le contenu de votre objet Cell.

En ce qui concerne la modification d'une cellule, le TableCellEditor reçoit le Object du TableModel lorsque vous souhaitez modifier une cellule avec la JTable. Le TableCellEditor renverra un Component qui est utilisé pour modifier le contenu de la cellule (le Object) à l'aide de la méthode getTableCellEditorComponent.

Dans le cas où vous fournissez, je pense que faire un JTextField qui implémente l'interface TableCellEditor sera en mesure de faire le travail pour vous. Lorsque vous remplacez le getTableCellEditorComponent, vérifiez que vous avez une instance de l'objet Cell (c'est-à-dire object instanceof Cell) et si c'est le cas, initialisez votre JTextField pour contenir le contenu de votre objet Cell que vous souhaitez afficher ou modifier.

Lecture recommandée: Je trouve l'article Rendering cells in Swing's JTable component d'IBM developerWorks être très utile pour apprendre comment gérer JTable s et leurs rendu de cellule et d'édition. En particulier, les sections Creating custom renderers et Editiing table cells peuvent être intéressantes.

Questions connexes