我有一个列为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 :(得分: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();
}
}
}