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();
}
}
}