2010-08-02 7 views
1

J'ajoute Jbutton à une table par la classe extendibg AbstractCellEditor. Mais le clic de bouton, le texte ne marche pas de changement « Démarrer » pour « Stop » est .Voici la classe i mis en œuvre Problèmes avec l'ajout de JButton dans la table

 public class ButtonEditor1 extends AbstractCellEditor implements  
     TableCellEditor,ActionListener,TableCellRenderer{ 

     JButton btnSTART = new JButton("START"); 
     private JTable table ; 

    public ButtonEditor1(JTable table){ 
    this.table = table; 
    btnSTART.addActionListener(this); 
    } 
public Component getTableCellEditorComponent(JTable table, Object value, 
     boolean isSelected, int row, int column) { 

    return btnSTART; 
} 

public Object getCellEditorValue() { 
    // TODO Auto-generated method stub 

    return btnSTART; 
} 

public void actionPerformed(ActionEvent e) { 
    int row = table.getSelectedRow(); 
    if(btnSTART.getText().equals("START")){ 
     if(row != -1){ 
      btnSTART.setText("STOP"); 
     } 
    }else if(btnSTART.getText().equals("STOP")){ 

     if(row != -1){ 
      btnSTART.setText("START"); 
     } 
    } 
    fireEditingStopped(); 
} 
public Component getTableCellRendererComponent(JTable table, Object value, 
     boolean isSelected, boolean hasFocus, int row, int column) { 
    return btnSTART; 
} 

}

ce que je fais mal .. J'ai une classe de modèle qui prend la colonne en tant que JButton et ont remplacé la méthode setValueAt et getValueAt.

Répondre

2

Un JTable utilise des moteurs de rendu pour afficher des données. Une fois que vous avez cliqué sur la cellule en utilisant le bouton comme éditeur, l'éditeur de bouton est appelé pendant une fraction de seconde, puis la cellule est replacée en mode de rendu. Donc, si vous voulez changer le texte, vous changez la valeur dans le modèle.

+0

Je mets maintenant la valeur String dans le modèle au lieu de button et renderer le titre du bouton ainsi que la méthode actionPerformed() avec cette valeur. – harshit

Questions connexes