程序代码如下:import java.awt.BorderLayout;
import java.awt.Component;
import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;@SuppressWarnings("serial")
public class TestJtable extends JPanel {
   
 public TestJtable(){
  init();
 } private void init() {
  setLayout(new BorderLayout());
  JScrollPane scrollPane = new JScrollPane(createTable());   
  add(scrollPane);
 }
   
 private JTable createTable() {
  JTable table = new JTable();
  String[] tableHeads = new String[]{"端口1","端口2","端口3"};
  DefaultTableModel dtm = (DefaultTableModel)table.getModel();
  dtm.setColumnIdentifiers(tableHeads); if( table.getRowSelectionAllowed()==true){
  table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
 }
  /*******添加的一些数据,也可以从数据库中提取数据*************/
    
  dtm.addRow(new Object[]{new Boolean(false),new Boolean(false),new Boolean(false)});
  dtm.addRow(new Object[]{new Boolean(false),new Boolean(false),new Boolean(false)});
  dtm.addRow(new Object[]{new Boolean(false),new Boolean(false),new Boolean(false)});
  dtm.addRow(new Object[]{new Boolean(false),new Boolean(false),new Boolean(false)});
  dtm.addRow(new Object[]{new Boolean(false),new Boolean(false),new Boolean(false)});
  dtm.addRow(new Object[]{new Boolean(false),new Boolean(false),new Boolean(false)});
  dtm.addRow(new Object[]{new Boolean(false),new Boolean(false),new Boolean(false)});
  dtm.addRow(new Object[]{new Boolean(false),new Boolean(false),new Boolean(false)});
  dtm.addRow(new Object[]{new Boolean(false),new Boolean(false),new Boolean(false)});
    
    
    
  /*****设置table的列模型****/
  TableColumnModel tcm = table.getColumnModel();
  tcm.getColumn(0).setCellEditor(new DefaultCellEditor(new JCheckBox()));   
  tcm.getColumn(1).setCellEditor(new DefaultCellEditor(new JCheckBox()));   
  tcm.getColumn(2).setCellEditor(new DefaultCellEditor(new JCheckBox()));
    
  tcm.getColumn(0).setCellRenderer(new TestTableCellRenderer());   
  tcm.getColumn(0).setPreferredWidth(80);   
  tcm.getColumn(0).setWidth(80);   
  tcm.getColumn(0).setMaxWidth(80);   
    
  tcm.getColumn(1).setCellRenderer(new TestTableCellRenderer());   
  tcm.getColumn(1).setPreferredWidth(80);   
  tcm.getColumn(1).setWidth(80);   
  tcm.getColumn(1).setMaxWidth(80);   
    
  tcm.getColumn(2).setCellRenderer(new TestTableCellRenderer());   
  tcm.getColumn(2).setPreferredWidth(80);   
  tcm.getColumn(2).setWidth(80);   
  tcm.getColumn(2).setMaxWidth(80);           
  return table;
 } public static void main(String[] args) {
  JFrame jframe = new JFrame();
  jframe.setBounds(300,100,300,200);
  jframe.setTitle("测试");
  jframe.add(new TestJtable());
  jframe.setVisible(true);
 }
   
 
   
 class TestTableCellRenderer extends JCheckBox implements TableCellRenderer{  @Override
  public Component getTableCellRendererComponent(JTable table,
  Object value, boolean isSelected, boolean hasFocus, int row,
  int column) {
  Boolean b = (Boolean) value;   
  this.setSelected(b.booleanValue());   
  return this;     }
    
 }
}   设置每一行只能选择一个,希望大家帮帮忙 小弟感激不尽...

解决方案 »

  1.   

    你这个相当于自己实现一个JRadiButton,只是外观变成checkbox,工作量不小
      

  2.   

    嗯 您好 原程序是前辈写的  现在只能用JCheckBox这个 帮我一下 谢谢了
      

  3.   

    最快的方法就是放弃checkbox而换用JRadioButton,反正你要修改程序,改哪里只要实现功能就行。如果具体实现checkbox,需要改model我觉得东西很多,不好实现。还有一种思路是该JTable的模型,当一行的checkbox被点击后,同时设定同一行其他checkbox为非选中状态。从你代码用的模型直接继承的DefaultTableModel,改动的开发量也不小
      

  4.   


    我刚也试了 用JRadioButton也会出现 多个可以同时选啊  我要的效果是 一行只能选一个 你帮我看看 谢谢您了
    程序如下:
    package com.Test;import   java.awt.*; 
    import   java.awt.event.*; 
    import   javax.swing.*; 
    import   javax.swing.table.*; 
    import   javax.swing.event.*; public   class   rdButtonTest   extends   JFrame{ 
        public   rdButtonTest(){ 
            super( "rdButtonTest ");         DefaultTableModel   dm   =   new   DefaultTableModel(); 
            dm.setDataVector(new   Object[][]{ 
                                        {new   JRadioButton( "A1 "), new   JRadioButton( "A2 ")}, 
                                        {new   JRadioButton( "B1 "), new   JRadioButton( "B2 ")}}, 
                                          new   Object[]{ "Button ", "Group "}); 
        JTable   table   =   new   JTable(dm){ 
        public   void   tableChanged(TableModelEvent   e){ 
                super.tableChanged(e); 
                repaint(); 
            } 
        }; 
        table.getColumn( "Button ").setCellRenderer(new   ButtonRenderer()); 
        table.getColumn( "Button ").setCellEditor(new   ButtonEditor(new   JCheckBox()));
        table.getColumn( "Group ").setCellRenderer(new   ButtonRenderer()); 
        table.getColumn( "Group ").setCellEditor(new   ButtonEditor(new   JCheckBox())); 
        JScrollPane   scroll   =   new   JScrollPane(table); 
        getContentPane().add(scroll); 
        setSize(200,140); 
        setVisible(true); 
      } 
        public   static   void   main(String[]   args){ 
         rdButtonTest   frame   =   new   rdButtonTest(); 
            frame.addWindowListener(new   WindowAdapter()   { 
                public   void   windowClosing(WindowEvent   e)   { 
                    System.exit(0); 
                } 
            }); 
        } 

    // 
    class   ButtonRenderer   implements   TableCellRenderer{ 
        public   Component   getTableCellRendererComponent(JTable   table,Object   value, 
                                                boolean   isSelected,   boolean   hasFocus,int   row,int   column){ 
                if   (value==null)return   null; 
                return   (Component)value; 
        } 

    // 
    class   ButtonEditor   extends   DefaultCellEditor{ 
    //     private   JButton   button; 
        private   JComponent   button; 
        public   ButtonEditor(JCheckBox   checkBox){ 
            super(checkBox); 
        } 
        public   Component   getTableCellEditorComponent(JTable   table,   Object   value, 
                                          boolean   isSelected,   int   row,   int   column)   { 
            if   (value==null)return   null; 
            button   =   (JComponent)value; 
    //         button   =   (JButton)value; 
    //         button.setOpaque(true); 
    //想实现选中变色没有成功 
    /*         if   (isSelected)   { 
                button.setForeground(table.getSelectionForeground()); 
                button.setBackground(table.getSelectionBackground()); 
            }   else{ 
                button.setForeground(table.getForeground()); 
                button.setBackground(table.getBackground()); 
            }*/ 
    //这一段可以增加button事件,但ButtonEditor要实现ItemListener接口 
    //         button.addItemListener(this); 
            return   (JComponent)value; 
        } 
        public   Object   getCellEditorValue(){ 
              return   button; 
        } }怎么改?  麻烦 您看看  谢谢啦