Win a copy of Machine Learning Systems: Designs that scale this week in the Scala forum
or Xamarin in Action: Creating native cross-platform mobile apps in the Android forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic

JCheckBox in JTable  RSS feed

Posts: 2
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I am having trouble displaying a JCheckBox in a JTable. I am using table model to populate the table, however for the checkbox in a column is not displayed so I have to use text instead? I've tried using the render but it doesn't display the checkbox either.
Ranch Hand
Posts: 2823
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
What are you putting in the column? You need to put in Boolean. The JCheckbox will appear automatically. If you are using Boolean values, post some code so we can see what you are doing.
Posts: 17
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
compile and run this...
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.DefaultCellEditor;
import javax.swing.JScrollPane;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import java.awt.*;
import java.awt.event.*;
public class TableEditDemo extends JFrame {
private boolean DEBUG = true;
public TableEditDemo() {
MyTableModel myModel = new MyTableModel();
JTable table = new JTable(myModel);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
//Create the scroll pane and add the table to it.
JScrollPane scrollPane = new JScrollPane(table);
//Set up real input validation for the integer column.
//Add the scroll pane to this window.
getContentPane().add(scrollPane, BorderLayout.CENTER);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
private void setUpIntegerEditor(JTable table) {
//Set up the editor for the integer cells.
final WholeNumberField integerField = new WholeNumberField(0, 5);
DefaultCellEditor integerEditor =
new DefaultCellEditor(integerField) {
//Override DefaultCellEditor's getCellEditorValue method
//to return an Integer, not a String:
public Object getCellEditorValue() {
return new Integer(integerField.getValue());
table.setDefaultEditor(Integer.class, integerEditor);
class MyTableModel extends AbstractTableModel {
final String[] columnNames = {"First Name",
"Last Name",
"# of Years",
final Object[][] data = {
{"Mary", "Campione",
"Snowboarding", new Integer(5), new Boolean(false)},
{"Alison", "Huml",
"Rowing", new Integer(3), new Boolean(true)},
{"Kathy", "Walrath",
"Chasing toddlers", new Integer(2), new Boolean(false)},
{"Mark", "Andrews",
"Speed reading", new Integer(20), new Boolean(true)},
{"Angela", "Lih",
"Teaching high school", new Integer(4), new Boolean(false)}
public int getColumnCount() {
return columnNames.length;

public int getRowCount() {
return data.length;
public String getColumnName(int col) {
return columnNames[col];
public Object getValueAt(int row, int col) {
return data[row][col];
* JTable uses this method to determine the default renderer/
* editor for each cell. If we didn't implement this method,
* then the last column would contain text ("true"/"false"),
* rather than a check box.
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
* Don't need to implement this method unless your table's
* editable.
public boolean isCellEditable(int row, int col) {
//Note that the data/cell address is constant,
//no matter where the cell appears onscreen.
if (col < 2) {
return false;
} else {
return true;
public void setValueAt(Object value, int row, int col) {
if (DEBUG) {
System.out.println("Setting value at " + row + "," + col
+ " to " + value
+ " (an instance of "
+ value.getClass() + ")");
data[row][col] = value;
fireTableCellUpdated(row, col);
if (DEBUG) {
System.out.println("New value of data:");
private void printDebugData() {
int numRows = getRowCount();
int numCols = getColumnCount();
for (int i=0; i < numRows; i++) {
System.out.print(" row " + i + ":");
for (int j=0; j < numCols; j++) {
System.out.print(" " + data[i][j]);
public static void main(String[] args) {
TableEditDemo frame = new TableEditDemo();
i hope it clarifies ur doubt...that for showing check boxes in table u just need to have boolean values in the table.
u need to override the renderer class only when u want to customixe the way the cells in the table r presented !!
[This message has been edited by NIKHIL EROS (edited November 21, 2001).]
Sandhya ChowhanPawar
Posts: 2
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
thanks nikhil and paul!
i've tried using a similar example and it works, its just that when i assign " final Object[][] data = ... " differently it is not working, maybe because I want that boolean col to be editable. so basically i'm in using a 2d vector inseading of decl like u had it ... checkit out:
Vector dataModelVector = new Vector();
String userName = "Sam";
String userLastname = "Smith";
Boolean local = Boolean.TRUE;
dataModelVector.addElement(userName );
col.add("First Name");
col.add("Last Name");

model = new DefaultTableModel(tableModelVector, col){
public boolean isCellEditable(int r, int c){ return (c ==2)
public String getColumnName(int column) { return col.elementAt(column).toString(); }
public Object getValueAt(int row, int column) { return (Vector)tableModelVector.elementAt(row)).elementAt(column);
public void setValueAt(Object value, int row, int column){
if (value instanceOf Boolean && c==2)
((Vector)tableModelVector.elementAt(row)).setElementAt(value, Boolean.TRUE);
((Vector)tableModelVector.elementAt(row)).setElementAt(value, column);
fireTableCellUpdated(row, column);
thanks guys!
She said she got a brazillian. I think owning people is wrong. That is how I learned ... tiny ad:
Why should you try IntelliJ IDEA ?
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!