2010-07-12 4 views
0

У меня есть таблица со столбцом JButton.Как удалить Jbutton из таблицы

я установить рендерер следующим

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

рендерер и cellEditor классы

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; 
    } 

} 


} 

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

    } 

} 

Когда я удалить строку из таблицы. Я делаю model.remove (table.getSelectedRow()). Он удаляет строку, кроме JButton. Я предполагаю, что кнопка является частью компонента Renderer, поэтому он не удаляется. Как я могу это сделать?

ответ

2

Table Button Column пример обеспечивает рендеры и редактор для кнопки, а также в качестве примера действий, чтобы удалить строку из таблицы.

0

Нечетные. Может быть, кеширование?

Попробуйте вернуть пустую метку, когда нет значения?

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

Да, но кешируйте ссылку на JButton и JLabel и каждый раз возвращайте один и тот же, а не выделяя новую. –

+0

@Devon - Я ленив при кодировании без IDE :) – willcodejavaforfood

Смежные вопросы