Swing中的JTable中添加Checkbox不能选中

场景:Swing中的JTable中添加Checkbox不能选中,该如何处理

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){
  for(int i = 0 ; i < columns.length ; i++){
  if (columnName.equals(columns[i])){
  return i;
  }
  }
  return -1;
  }
   
  @Override
  public boolean isCellEditable(int rowIndex, int columnIndex) {
  if(this.getColumnName(columnIndex).equals(CHOOSE)){
  return true;
  }
  return false;
  }
  }

CheckBoxRenderer及Editor:

class CheckBoxRender extends JCheckBox implements TableCellRenderer {
  public CheckBoxRender(){
  super();
  }
  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
  JCheckBox box = new JCheckBox();
  box.setHorizontalAlignment(JLabel.CENTER);
  box.setSelected(Boolean.TRUE.equals(value)); 
  return box;
  }
  }
   
  class CheckBoxEditor extends DefaultCellEditor {
  public CheckBoxEditor() {
  this(new JCheckBox());
  }
   
  public CheckBoxEditor(JCheckBox checkBox) {
  super(checkBox);
  checkBox.setHorizontalAlignment(JLabel.CENTER);
  }
  }

------解决方案--------------------
Java code
    public class MyComboBoxRenderer extends JCheckBox implements TableCellRenderer {

        public MyComboBoxRenderer() {
            super();
        }
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            if (isSelected) {
                setForeground(table.getSelectionForeground());
                super.setBackground(table.getSelectionBackground());
            } else {
                setForeground(table.getForeground());
                setBackground(table.getBackground());
            }
            this.setSelected((Boolean)value);
            return this;
        }
    }

    public class MyComboBoxEditor extends DefaultCellEditor {
        public MyComboBoxEditor() {
            super(new JCheckBox());
        }
    }

------解决方案--------------------
[code=Java][/code]
import java.awt.event.*; 
 import javax.swing.*; 
 import javax.swing.table.*; 
 import java.awt.*; 
 class JtableComboBoxTest extends JFrame
 { 
  private JTable table; 
  public JtableComboBoxTest(){ 
  String[] array=new String[11]; 
  for(int i=0;i <10;i++) 
  array[i]=""+(i+1); 
  array[10]="未选择"; 
  JComboBoxCellEditor editor=new JComboBoxCellEditor(array); 
  table=new JTable(new Object[][]{{"未选择",1},{"未选择",2},{"未选择",3},{"未选择",4},{"未选择",5},{"未选择",6}}, 
  new Object[]{"Column1","Column2"}); 
  TableColumnModel colModel=table.getColumnModel(); 
  colModel.getColumn(0).setCellEditor(editor); 
  this.add(new JScrollPane(table),BorderLayout.CENTER); 
  this.setSize(200,200); 
  this.setVisible(true); 
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
  } 
  public static void main(String[] args)
  { 
  new JtableComboBoxTest(); 
  
  } 
  class JComboBoxCellEditor extends DefaultCellEditor 
  { 
  private Object needRemove=null;//下次点击JComboBox时,需要删除的选项 
  private Object needAdd=null;//下次点击JComboBox时,需要添加的选项 
  private Object value;//当前comboBox显示的值 
  private JComboBox comboBox=null; 
  public JComboBoxCellEditor(Object[] value){ 
  super(new JComboBox(value)); 
  } 
  public Component getTableCellEditorComponent(JTable table, Object value,
  boolean isSelected, int row, int column){ 
  if(comboBox==null){//初始化comboBox 
  comboBox=(JComboBox)super.getTableCellEditorComponent(table, value, isSelected, row, column); 
  comboBox.addItemListener(new ItemHandler());//添加事件监听 
  comboBox.setSelectedIndex(10); 
  } 
  this.value=value;//当前JComboBox显示的选项 
  if(needAdd!=null) 
  comboBox.addItem(needAdd); 
  if(needRemove!=null) 
  comboBox.removeItem(needRemove); 
  return comboBox; 
  } 
  private class ItemHandler implements ItemListener 
  { 
  public void itemStateChanged(ItemEvent e){ 
  needRemove=comboBox.getSelectedItem(); 
  //当JComboBox显示的选项与用户选择的选项不同时 
  //需要将原来的显示的选项加入JComoboBox 
  if(!comboBox.getSelectedItem().equals(value)&&!"未选择".equals(value)){ 
  needAdd=value; 
  } 
  else 
  needAdd=null; 
  }
  } 
  } 
 
 } 
看看 这个例子 希望对你 有帮助!