如何从表中删除Jbutton

时间:2010-07-12 18:38:00

标签: swing

我有一个列为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 个答案:

答案 0 :(得分:2)

Table Button Column示例为按钮提供渲染器和编辑器,以及从表中删除行的示例Action。

答案 1 :(得分: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();
    }

}   


}