private ColumnInfo[] createColumnInfos() {
    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(" ")
    };
  }
private ColumnInfo[] createColumnInfos()