Reputation: 5045
Preface: I am horrible with java, and worse with java ui components.
I have found several different tutorials on how to add buttons to tables, however I am struggling with adding checkboxes. I need to have a column that draws a text box ticked on default (cell renderer i think handles that), then on click of tickbox, unticks the box, redraws said box, and fires off an event somewhere I can track.
currently I have a custom cellrenderer:
public class GraphButtonCellRenderer extends JCheckBox implements TableCellRenderer {
public GraphButtonCellRenderer() {
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if(isSelected)
setSelected(true);
else
setSelected(false);
setMargin(new Insets(0, 16, 0, 0));
setIconTextGap(0);
setBackground(new Color(255,255,255,0));
return this;
}}
Which currently handles drawing the tick box, but only ticks and unticks the box if that row is selected. But I don't know how to handle the events. Really what I am asking is possibly a link to a good tutorial on how to add checkboxes cleanly to a JTable. Any assist is greatly appreciated :)
Upvotes: 8
Views: 51898
Reputation: 10454
There's no need to create your own table renderer. Here's a simpler example. Just create a custom table model and for a given column return the class Boolean for:
public Class getColumnClass(int column)
If you want the column to be editable, return true for
public boolean isCellEditable(int row, int column)
JTable takes care of the rendering for you.
Upvotes: 26
Reputation: 552
As Peter say, its easy using extended DefaultTableModel class, ex:
class NewTableModel extends DefaultTableModel{
public Class<?> getColumnClass(int columnIndex) {
return getValueAt(0, columnIndex).getClass();
}
}
Upvotes: 7
Reputation: 5798
The easiest solution is to use the DefaultTableModel and use Boolean object as values.
Upvotes: 3
Reputation: 205875
Here's a simple rather elaborate example using a TableCellRenderer
and TableCellEditor
. See also, Concepts: Editors and Renderers.
Addendum: @Jay Askren's point is well taken. The default renderer for Boolean.class
, as described in the tutorial, may be all you need.
Upvotes: 4