2010-07-12 7 views
0

J'ai une table avec une colonne comme JButton.comment supprimer Jbutton de la table

i mis le moteur de rendu comme suit

TableColumn col = colModel.getColumn(3); 
    col.setCellRenderer(new MyRenderer("Del")); 
    col.setCellEditor(new MultiTradeCellEditor(new JCheckBox())); 

Les classes renderer et cellEditor sont

class MyRenderer extends JButton implements TableCellRenderer{ 

    public MyRenderer(String text){ 
     super(text); 
    } 
    public Component getTableCellRendererComponent(JTable table, Object value, 
      boolean isSelected, boolean hasFocus, int row, int column) { 
     return this; 
    } 

} 


} 

classe CellEditor

class MultiTradeCellEditor extends DefaultCellEditor{ 

    protected JButton button; 

    public MultiTradeCellEditor(JCheckBox checkBox) { 
     super(checkBox); 
     button = new JButton("Del"); 
     button.setOpaque(true); 
     button.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) {  
      selectionList.getList().remove(table.getSelectedRow()); 
       table.repaint(); 
           } 
     }); 

    } 

} 

Quand je supprimer la ligne de la table. Je fais model.remove (table.getSelectedRow()). Il supprime la ligne sauf le JButton. Je suppose que ce bouton fait partie d'un composant Renderer donc il n'est pas supprimé. Comment puis-je faire cela?

Répondre

2

L'exemple Table Button Column fournit des équarrisseurs et éditeur pour un bouton ainsi qu'un exemple d'action pour supprimer une ligne de la table.

0

Odd. Peut-être une chose de mise en cache?

Essayez de renvoyer une étiquette vide lorsqu'il n'y a pas de valeur?

class MyRenderer extends JComponent implements TableCellRenderer{ 
    private String text; 
    public MyRenderer(String text){ 
     this.text = text; 
    } 
    public Component getTableCellRendererComponent(JTable table, Object value, 
      boolean isSelected, boolean hasFocus, int row, int column) { 
     if (value) 
      return new JButton(text); 
     else 
      return new JLabel(); 
    } 

} 


} 
+0

Oui, mais mettez en cache une référence à JButton et JLabel et renvoyez la même à chaque fois au lieu d'en allouer une nouvelle. –

+0

@Devon - Je suis paresseux lors du codage sans IDE :) – willcodejavaforfood

Questions connexes