2010-07-12 85 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组件的一部分,所以它不会被删除。 我该怎么做?

回答

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的引用,并且每次都返回一个引用,而不是分配一个新引用。 – 2010-07-13 20:24:19

+0

@Devon - 编码时没有IDE,我很懒惰:) – willcodejavaforfood 2010-07-14 07:30:04