首先,DefaultTableModel仍是要重写的,不过能够不用重写整个类,只要写一个继承DefaultTableModel的类,里面添加你要的响应函数就好了。代码以下
class AddCheckboxTableModel extends DefaultTableModel{
/**
*
*/
private static final long serialVersionUID = 1L;
public MyTableModel(Object[][] data,String[] columns)
{ super(data,columns); }
public boolean isCellEditable(int row,int column){ //设置Table单元格是否可编辑
if(column==0)return true;
return false;
}
public Class<?> getColumnClass(int columnIndex)
{
if(columnIndex==0)
{ return Boolean.class;
}
return Object.class;
}
}
而后,在构建Jtable的时候就用这个datamodel,构建方法示例:
String[] columnNames = {"Check","ID","Name","Sex","Status","Entry-Date"};
Object[][] tableData = new Object[employeeList.size()][6];
for(int i =0; i<employeeList.size();i++)
{
tableData[i][0]=new Boolean(false);//用boolean就能够把第一列显示为checkBox,这是JTable特有的功能
tableData[i][1]=employeeList.get(i).getEmployeeID();
tableData[i][2]=employeeList.get(i).getName();
tableData[i][3]=employeeList.get(i).getSex();
tableData[i][4]=employeeList.get(i).getStatus();
tableData[i][5]=employeeList.get(i).getEntryDay();
}
AddCheckboxTableModel tableModel = new AddCheckboxTableModel (tableData, columnNames);
table.setModel(tableModel);
table.setPreferredScrollableViewportSize(new Dimension(500, 300));
table.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
table.setBounds(30,30,500,300);
table.setRowHeight (25);
这样就能够构建一个Table,除了第一列,其余列都是不可编辑的。
若是想要为能够勾选的同时响应行点击事件,能够这样作:
table.addMouseListener(adapter);
table.repaint();
table.updateUI();
private MouseAdapter adapter = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int row=table.getSelectedRow();
if(table.getSelectedColumn()==0)//若是是第一列的单元格,则返回,不响应点击
return;
}