title: How do I add a JCheckBox to DefaultTableModel by adding a Boolean column?
body: <p>I am trying to add a <em>jcheckbox</em> to the first column of a JTable, which uses a <code>DefaultTableModel</code>. I tried returning a <code>Boolean.class</code> for that column, but it doesn't work. </p>
  
  <p>I already have a <em>jcombobox</em> in the last column, but using the same method I used to add that in order to add a <em>jcheckbox</em> doesn't work. I read online that java automatically returns a <em>checkbox</em> for you if you render a <code>Boolean.class</code> in a column, but using it also doesn't work. I think this might be a problem in the way I am ordering the components. </p>
  
  <pre><code>//import statements. 
  public class CourseSelection extends GUIDesign implements ActionListener{
      // lot of extraneous stuff,
      JLabel termLabel;
      String term;
  
      JLabel departmentLabel;
      String department;
      String[] columns = {
          "Select", "CRN", "Title", "Instructor", "Time", 
          "Days", "Location", "Section", "Code", "Mode of Grading"
      };
      int courses;
      Object[][] data;
  
      String[] modes = {"Audit", "Pass/Fail", "Letter Grding"};
  
      // create the table here, with model. 
      JTable table;
  
      DefaultTableModel model = new DefaultTableModel() {
          Class[] types = {
              Boolean.class, String.class, String.class, String.class, 
              String.class, String.class, String.class, String.class, 
              String.class, Object.class
          };
          // making sure that it returns boolean.class.   
          @Override
          public Class getColumnClass(int columnIndex) {
              return types[columnIndex];
          }
      };
  
      JPanel termPanel = new JPanel();
      JPanel departmentPanel = new JPanel();
  
      JButton backButton = new JButton("Back");
      JButton registerButton = new JButton("Register");
      JButton refreshButton = new JButton("Refresh");
  
      public CourseSelection(GTPort gPort) {
          super("Course Selection", 3);
          setLayout(new BoxLayout(this,BoxLayout.PAGE_AXIS));
          header = new JPanel();
          header.setSize(getWidth(), 30);
          body = new JPanel();
          body.setLayout(new BoxLayout(body,BoxLayout.Y_AXIS));
  
          header.setBackground(color);
          title.setFont(new Font("Helvetica", 1,20));
          header.add(title);
  
          termLabel = new JLabel("Term:        " + term);
  
          data = new Object[25][10];
          model = new DefaultTableModel(data, columns);
          table = new JTable(model);
          table.setModel(model);
  
          departmentLabel = new JLabel("Department: " + department);
  
          termPanel.add(termLabel);
          departmentPanel.add(departmentLabel);
  
          JComboBox box = new JComboBox(modes);
  
          JCheckBox checkBox = new JCheckBox();
  
          // lot of other code I tried that doesn't work. 
          // table.getColumnModel().getColumn(1)
          //      .setCellEditor(table.getDefaultEditor(Boolean.class));  
          // table.getColumnModel().getColumn(1)
          //      .setCellRenderer(table.getDefaultRenderer(Boolean.class));  
  
          // table.setDefaultEditor(Boolean.class, new DefaultCellEditor(checkBox));
          // table.setDefaultRenderer(Boolean.class, new DefaultTableCellRenderer());
  
          // model.getColumnModel().getColumn(1)
          //      .setCellEditor(new DefaultCellEditor(checkBox));
          // model.getColumnModel().getColumn(1)
          //      .setCellRenderer(new DefaultTableCellRenderer());
  
          table.getColumnModel().getColumn(9)
               .setCellEditor(new DefaultCellEditor(box));
          //   .setCellEditor(new DefaultCellEditor(box));
  
          // table = new JTable(model);
  
          body.add(termPanel);
          body.add(departmentPanel);
  
          body.add(table.getTableHeader());
          body.add(table);
  
          // body.add(body);
          buttonPanel.add(backButton);
          buttonPanel.add(refreshButton);
          buttonPanel.add(registerButton);
  
          backButton.addActionListener(this);
          refreshButton.addActionListener(this);
          registerButton.addActionListener(this);
  
          add(header);
          add(body);
          add(buttonPanel);
  
          gtPort = gPort;
      }
  }
  </code></pre>