ColumnInfo[] () { return new ColumnInfo[]{ new ColumnInfo<DefaultMutableTreeNode, Boolean>(" ") { // "" for the first column's name isn't a good idea final BooleanTableCellRenderer myRenderer = new BooleanTableCellRenderer(); @Override public Boolean valueOf(DefaultMutableTreeNode o) { return isNodeSelected(o); } @Override public int getWidth(JTable table) { return myRenderer.getPreferredSize().width; } @Override public TableCellEditor getEditor(DefaultMutableTreeNode o) { return new DefaultCellEditor(new JCheckBox()); } @Override public TableCellRenderer getRenderer(DefaultMutableTreeNode o) { myRenderer.setEnabled(isCellEditable(o)); return myRenderer; } @Override public void setValue(DefaultMutableTreeNode o, Boolean value) { setNodeSelected(o, Boolean.TRUE.equals(value)); } @Override public Class<Boolean> getColumnClass() { return Boolean.class; } @Override public boolean isCellEditable(DefaultMutableTreeNode o) { return valueOf(o) != null; } }, new TreeColumnInfo(" ") }; }