Here my full working table model that works and you can add rows remove rows and change values.
You can easly add to your frame:
    protected MyTableModel mytableModel = new MyTableModel();
    scroll = new JScrollPane(mytableModel);
The table class:
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import org.apache.poi.ss.usermodel.Header;
class MyTableModel extends JPanel   {
    private static final int CHECK_COL = 5;
    private static  Object[][] DATA = { };
    public static String[] COLUMNS = {"Col1","Col2","Col3","Col4","Col5", "Checkbox"};
    protected DataModel dataModel = new DataModel(DATA, COLUMNS);
    private JTable table = new JTable(dataModel);
    private DefaultListSelectionModel selectionModel;
    public MyTableModel(){
        super(new BorderLayout());
        this.add(new JScrollPane(table));
        this.add(new ControlPanel(), BorderLayout.SOUTH);
        table.setPreferredScrollableViewportSize(new Dimension(250, 175));
        selectionModel = (DefaultListSelectionModel) table.getSelectionModel();
        JTableHeader header = table.getTableHeader();
        header.setDefaultRenderer(new HeaderRenderer(table));
    }
    private class DataModel extends DefaultTableModel {
        public DataModel(Object[][] data, Object[] COLUMNS) {
            super(data, COLUMNS);
        }
        @Override
        public Class<?> getColumnClass(int columnIndex) {
            if (columnIndex == CHECK_COL) {
                return getValueAt(0, CHECK_COL).getClass();
            }
            return super.getColumnClass(columnIndex);
        }
        @Override
        public boolean isCellEditable(int row, int column) {
            if(column==CHECK_COL && !Main.checked)
                return true;
            return false;
        }
    }
    private static class HeaderRenderer implements TableCellRenderer {
        DefaultTableCellRenderer renderer;
        public HeaderRenderer(JTable table) {
            renderer = (DefaultTableCellRenderer)
                table.getTableHeader().getDefaultRenderer();
            renderer.setHorizontalAlignment(JLabel.CENTER);
        }
        @Override
        public Component getTableCellRendererComponent(
            JTable table, Object value, boolean isSelected,
            boolean hasFocus, int row, int col) {
            return renderer.getTableCellRendererComponent(
                table, value, isSelected, hasFocus, row, col);
        }
    }
    private class ControlPanel extends JPanel {
        /**
         * 
         */
         private static final long serialVersionUID = -7342459414751761853L;
        public ControlPanel() {
            //   this.add(new JLabel("Selection:"));
            //  this.add(new JButton(new SelectionAction("Clear", false)));
            //    this.add(new JButton(new SelectionAction("Check", true)));
        }
    }
    private class SelectionAction extends AbstractAction {
        boolean value;
        public SelectionAction(String name, boolean value) {
            super(name);
            this.value = value;
        }
        @Override
        public void actionPerformed(ActionEvent e) {
            for (int i = 0; i < dataModel.getRowCount(); i++) {
                if (selectionModel.isSelectedIndex(i)) {
                    dataModel.setValueAt(value, i, CHECK_COL);
                }
            }
        }
    }
    public void setValueAt_Cell(String val, int row, int col) {
        // TODO Auto-generated method stub
        if(row>=dataModel.getRowCount()){
            dataModel.addRow(new Object[] {"","","","","",false});
        }
        dataModel.setValueAt(val, row, col);
    }
    public String getValAtPos(int row,int col) {
        //System.out.println(dataModel.getValueAt(row, col));
        if(row>=dataModel.getRowCount()){
            return null;
        }
        return dataModel.getValueAt(row, col).toString();
    }
    public int getRowCount(){
        return DATA.length;
    }
    public boolean get_checked_row(int row){
        return (boolean) dataModel.getValueAt(row, 5);
    }
    public void clear() {
        while(dataModel.getRowCount()!=0){
            for(int i=0;i<dataModel.getRowCount();i++){
                dataModel.removeRow(i);     
            }
            dataModel.fireTableRowsDeleted(0, getRowCount());
            dataModel.fireTableDataChanged();
        }
    }
}