日期:2014-05-20  浏览次数:20807 次

Swing中的JTable中添加Checkbox不能选中
JTable中的一列我渲染成了CheckBox,但是当鼠标点击后,不能显示出选中的状态。请高手帮忙解决一下啊。在线等!
JTable的model:

class EntitySynchroTableModel extends AbstractTableModel{
  private List<Boolean> checkBoxValues = new ArrayList<Boolean>();
  private List<ComparisonResultVO> datas;
  private List<ComparisonResultVO> selectdatas;
   
  public EntitySynchroTableModel(){
  datas = new ArrayList<ComparisonResultVO>();
  selectdatas = new ArrayList<ComparisonResultVO>();
  }
   
  public int getRowCount() {
  return datas == null ? 0 : datas.size();
  }

  public int getColumnCount() {
  return columns == null ? 0 : columns.length;
  }

  public Object getValueAt(int rowIndex, int columnIndex) {
  if(null==datas || rowIndex>datas.size()-1)
  return null;
  ComparisonResultVO tempVO = datas.get(rowIndex);
  if(getColumnName(columnIndex).equals(CHOOSE)){
  return this.checkBoxValues.get(rowIndex);
  }
  if(getColumnName(columnIndex).equals(CURNET_RESOURCE)){
  return tempVO.getLocalEntity();
  }
  if(getColumnName(columnIndex).equals(NOTE)){
  return tempVO.getNote();
  }
   
  for(Map.Entry<LocalNetVO,RemoteEntityStatusVO> entity : tempVO.getRemoteEntityMap().entrySet()){
  if(getColumnName(columnIndex).equals(entity.getKey().getFromNetlName())){
  return entity.getValue();
  }
  }
  return null;
  }
   
  public Class<?> getColumnClass(int columnIndex){
  if(getColumnName(columnIndex).equals(CHOOSE)){
  return Boolean.class;
  }
  if(getColumnName(columnIndex).equals(CURNET_RESOURCE))
  return BaseVO.class;
  for(LocalNetVO vo : localNetVOs){
  if(getColumnName(columnIndex).equals(vo.getFromNetlName()))
  return RemoteEntityStatusVO.class;
  }
  if(getColumnName(columnIndex).equals(NOTE)){
  return String.class;
  }
  return null;
  }
   
  public String getColumnName(int column){
  return columns == null ? "" : columns[column];
  }
   
  public void clear(){
  if(null != datas){
  datas.clear();
  fireTableDataChanged();
  }
  }
   
  public void setData(List<ComparisonResultVO> datas){
  this.datas = datas;
  this.checkBoxValues.clear();
  for(ComparisonResultVO result : datas){
  this.checkBoxValues.add(false);
  }
  fireTableDataChanged();
  }
   
  public void removeRow(int rowIndex){
  if(null != datas){
  datas.remove(rowIndex);
  fireTableDataChanged();
  }
  }
   
  public int getColumnIndexByName(String columnName){