就是一个表里面带有一列JCheckBox,想通过监听JCheckBox,来获取对应行值行的值。小程序拿去就可以运行,大虾们帮我看看为什么监听不到呢?要是有更好的实现程序,提供给小弟更是不甚感激。紧急求救!!!
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;public class TestTableChange extends JFrame { 
JScrollPane tsp;
JTable table;
public TestTableChange(){
this.setBounds(400, 400, 400, 400);
init();
this.setVisible(true);
}
private void init() {
JCheckBox cb1 = new JCheckBox();
JCheckBox cb2 = new JCheckBox();
JCheckBox cb3 = new JCheckBox();
cb1.addActionListener(new CheckBoxListener());
cb2.addActionListener(new CheckBoxListener());
cb3.addActionListener(new CheckBoxListener());

String[] columnNames = {"选择情况","课程编号","课程名称"};
Object[][] obj = {{cb1,"01","语文"},{cb2,"02","数学"},{cb3,"03","历史"}};
DefaultTableModel model = new DefaultTableModel(obj,columnNames);
table = new JTable(model);

TableColumn   column   =   table.getColumnModel().getColumn(0); 
//设置编辑器 
column.setCellEditor(new   DefaultCellEditor(new   JCheckBox())); 
//设置渲染器 
column.setCellRenderer(new   CheckBoxRenderer()); 

tsp = new JScrollPane(table);
this.add(tsp,BorderLayout.CENTER);
}
//CheckBoxRenderer   是一个自己编写的实现TableCellRenderer接口的类 
class   CheckBoxRenderer   implements   TableCellRenderer{ 
public   JCheckBox   chk; 
public   CheckBoxRenderer(){ 
this.chk   =   new   JCheckBox(); 

 //其中主要要实现这个函数 
public   Component   getTableCellRendererComponent(JTable   arg0,   Object   value,   boolean   isSelected,   boolean   arg3,   int   arg4,   int   arg5)   { 
this.chk.setSelected(Boolean.TRUE   ==   value); 
this.chk.setEnabled(isSelected); 
this.chk.setHorizontalAlignment(JCheckBox.CENTER); 
return   this.chk; 

}

class CheckBoxListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
JCheckBox cb = (JCheckBox)e.getSource();
if(cb.isSelected()){
System.out.println("选择到了");
}
}
}

public static void main(String[] args) {
new TestTableChange();
}

}

解决方案 »

  1.   

    new CheckBoxListener());-->你不定义一个吗,例如new CheckBoxListener(new xx()));
      

  2.   

    请问,你的cb1,cb2,cb3注册CheckBoxListener有什么用哇?
    你CheckBoxRenderer里的checkBox不是cb1,cb2,cb3啊.
    你要么在renderer里注册下.
    要么这样,因为我看你renderer里这样写:this.chk.setSelected(Boolean.TRUE   ==   value); 
    那么当点击的时候把那个cell里的值直接改了,就在外面注册table的mouse单击事件,setValueAt()里放Boolean.TRUE或者Boolean.FALSE.不用注册checkbox的事件.
      

  3.   


    public class TestTableChange extends JFrame {     
        JScrollPane tsp;
        JTable table;    
        public TestTableChange(){
            this.setBounds(400, 400, 400, 400);
            init();
            this.setVisible(true);
        }
        private void init() {
            String[] columnNames = {"选择情况","课程编号","课程名称"};
            Object[][] obj = {{new JCheckBox(),"01","语文"},{new JCheckBox(),"02","数学"},{new JCheckBox(),"03","历史"}};
            DefaultTableModel model = new DefaultTableModel(obj,columnNames);
            table = new JTable(model);
            
            TableColumn   column   =   table.getColumnModel().getColumn(0); 
            //设置编辑器 
            column.setCellEditor(new   DefaultCellEditor(new   JCheckBox())); 
            //设置渲染器 
            column.setCellRenderer(new   CheckBoxRenderer()); 
            
            tsp = new JScrollPane(table);
            this.add(tsp,BorderLayout.CENTER);    
        }
        //CheckBoxRenderer   是一个自己编写的实现TableCellRenderer接口的类 
        class   CheckBoxRenderer   implements   TableCellRenderer{ 
            public   JCheckBox   chk; 
            public   CheckBoxRenderer(){ 
            this.chk   =   new   JCheckBox(); 
            this.chk.addActionListener(new CheckBoxListener());
            } 
             //其中主要要实现这个函数 
            public   Component   getTableCellRendererComponent(JTable   arg0,   Object   value,   boolean   isSelected,   boolean   arg3,   int   arg4,   int   arg5)   { 
            this.chk.setSelected(Boolean.TRUE   ==   value); 
            this.chk.setEnabled(isSelected); 
            this.chk.setHorizontalAlignment(JCheckBox.CENTER); 
            return   this.chk; 
            } 
        }
        
        class CheckBoxListener implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                JCheckBox cb = (JCheckBox)e.getSource();
                if(cb.isSelected()){
                    System.out.println("选择到了");
                }
            }
        }
        
        public static void main(String[] args) {
            new TestTableChange();
        }
        
    }
      

  4.   


    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;import javax.swing.DefaultCellEditor;
    import javax.swing.JCheckBox;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.table.TableColumn;public class TestTableChange extends JFrame implements ItemListener{     
        JScrollPane tsp;
        JTable table;  
        JCheckBox cb1 = new JCheckBox();
        JCheckBox cb2 = new JCheckBox();
        JCheckBox cb3 = new JCheckBox();
        JCheckBox[] boxes=new JCheckBox[3];
        public TestTableChange(){
            this.setBounds(400, 400, 400, 400);
            init();
            this.setVisible(true);
        }
        private void init() {/*        cb1.addActionListener(new CheckBoxListener());
            cb2.addActionListener(new CheckBoxListener());
            cb3.addActionListener(new CheckBoxListener());*/
            
            cb1.addItemListener(this);
            cb1.setName("cb1");
            cb2.addItemListener(this);
            cb2.setName("cb2");
            cb3.addItemListener(this);
            cb3.setName("cb3");
            boxes[0]=cb1;
            boxes[1]=cb2;
            boxes[2]=cb3;
            String[] columnNames = {"选择情况","课程编号","课程名称"};
            Object[][] obj = {{cb1,"01","语文"},{cb2,"02","数学"},{cb3,"03","历史"}};
            DefaultTableModel model = new DefaultTableModel(obj,columnNames);
            table = new JTable(model);
            TableColumn   column   =   table.getColumnModel().getColumn(0); 
            //设置编辑器 
            column.setCellEditor(new   DefaultCellEditor(new   JCheckBox())); 
            //设置渲染器 
            column.setCellRenderer(new   CheckBoxRenderer(boxes)); 
            
            tsp = new JScrollPane(table);
            this.add(tsp,BorderLayout.CENTER); 
        }
        //CheckBoxRenderer   是一个自己编写的实现TableCellRenderer接口的类 
        class   CheckBoxRenderer   implements   TableCellRenderer{ 
            public   JCheckBox   chk; 
            private JCheckBox[] boxes;
            public   CheckBoxRenderer(){ 
          //  this.chk   =   new   JCheckBox(); 
            } 
            public CheckBoxRenderer(JCheckBox[] boxes){
             this.boxes=boxes;
            }
             //其中主要要实现这个函数 
            public   Component   getTableCellRendererComponent(JTable table,
                    Object value,
                    boolean isSelected,
                    boolean hasFocus,
                    int row,
                    int column)   {
             chk=boxes[row];
             chk.setSelected(Boolean.valueOf(value.toString())); 
           //  chk.setEnabled(isSelected); 
             chk.setHorizontalAlignment(JCheckBox.CENTER); 
             return   chk; 
            } 
        }
        
        class CheckBoxListener implements ActionListener {
            public void actionPerformed(ActionEvent e) {
             System.out.println("action");
                JCheckBox cb = (JCheckBox)e.getSource();
                if(cb.isSelected()){
                    System.out.println("选择到了");
                }
            }
        }
        
        public static void main(String[] args) {
            new TestTableChange();
        }
    public void itemStateChanged(ItemEvent e) {
    JCheckBox box=(JCheckBox)e.getItem();
    System.out.println(box.getName()+" is selected");
    }
    }
    这样试试看
      

  5.   

    我试了下,程序没有运行到监听器的主方法public void actionPerformed(ActionEvent e){}
      

  6.   

    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.DefaultCellEditor;
    import javax.swing.JCheckBox;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.table.TableColumn;public class csdntest{
        public static void main(String[] args) {
            TestTableChange f = new TestTableChange();   
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
            f.show();   
        }
    }
    class TestTableChange extends JFrame {     
        JScrollPane tsp;
        JTable table;    
        public TestTableChange(){
            this.setBounds(400, 400, 400, 400);
            init();
            this.setVisible(true);
        }
        private void init() {
            cb1.addActionListener(new CheckBoxListener());
            cb2.addActionListener(new CheckBoxListener());
            cb3.addActionListener(new CheckBoxListener());
            
            String[] columnNames = {"选择情况","课程编号","课程名称"};
            Object[][] obj = {{cb1,"01","语文"},{cb2,"02","数学"},{cb3,"03","历史"}};
            DefaultTableModel model = new DefaultTableModel(obj,columnNames);
            table = new JTable(model);
            
            TableColumn   column   =   table.getColumnModel().getColumn(0); 
            //设置编辑器 
            column.setCellEditor(new   DefaultCellEditor(new   JCheckBox())); 
            //设置渲染器 
            column.setCellRenderer(new   CheckBoxRenderer()); 
            
            tsp = new JScrollPane(table);
            this.add(tsp,BorderLayout.CENTER);    
        }
        //CheckBoxRenderer   是一个自己编写的实现TableCellRenderer接口的类 
        
        class   CheckBoxRenderer   implements   TableCellRenderer{ 
            public   JCheckBox   chk; 
            public   CheckBoxRenderer(){ 
            this.chk   =   new   JCheckBox(); 
            } 
             //其中主要要实现这个函数 
            public   Component   getTableCellRendererComponent(JTable   arg0,   Object   value,   boolean   isSelected,   boolean   arg3,   int   arg4,   int   arg5)   { 
            this.chk.setSelected(Boolean.TRUE   ==   value); 
            this.chk.setEnabled(isSelected); 
            this.chk.setHorizontalAlignment(JCheckBox.CENTER); 
            return   this.chk; 
            } 
        }
        
        class CheckBoxListener implements ActionListener {
         public CheckBoxListener(){
         cb1.getSize();
         }
            public void actionPerformed(ActionEvent e) {
                Object source = e.getSource();
                if(source == cb1 && cb1.isSelected()){
                    System.out.println("选择到了");
                }
                if(source == cb2 && cb2.isSelected()){
                    System.out.println("选择到了");
                }
                if(source == cb3 && cb3.isSelected()){
                    System.out.println("选择到了");
                }
            }
        }
        
        private JCheckBox cb1 = new JCheckBox();
        private JCheckBox cb2 = new JCheckBox();
        private JCheckBox cb3 = new JCheckBox();
        
    }
    刚上完夜班,还是没解决,不过这样写好点,lz你那样写再好的机器也会崩的...
      

  7.   

    这样就可以了。看控制台输出。[code=Java
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.DefaultCellEditor;
    import javax.swing.JCheckBox;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.table.TableColumn;public class TestTableChange extends JFrame {     
        JScrollPane tsp;
        JTable table;    
        public TestTableChange(){
            this.setBounds(400, 400, 400, 400);
            init();
            this.setVisible(true);
        }
        private void init() {
            JCheckBox cb1 = new JCheckBox();
            JCheckBox cb2 = new JCheckBox();
            JCheckBox cb3 = new JCheckBox();
            //cb1.addActionListener(new CheckBoxListener());
            //cb2.addActionListener(new CheckBoxListener());
            //cb3.addActionListener(new CheckBoxListener());
            
            String[] columnNames = {"选择情况","课程编号","课程名称"};
            Object[][] obj = {{cb1,"01","语文"},{cb2,"02","数学"},{cb3,"03","历史"}};
            DefaultTableModel model = new DefaultTableModel(obj,columnNames);
            table = new JTable(model);
            
            TableColumn   column   =   table.getColumnModel().getColumn(0); 
            //设置编辑器 
            column.setCellEditor(new   DefaultCellEditor(cb1)); 
            //设置渲染器 
            column.setCellRenderer(new CheckBoxRenderer(cb1));         
            column.setCellRenderer(new CheckBoxRenderer(cb2));         
            column.setCellRenderer(new CheckBoxRenderer(cb3)); 
            
            tsp = new JScrollPane(table);
            this.add(tsp,BorderLayout.CENTER);    
        }
        //CheckBoxRenderer   是一个自己编写的实现TableCellRenderer接口的类 
        class   CheckBoxRenderer   implements   TableCellRenderer{ 
            public   JCheckBox   chk; 
            public   CheckBoxRenderer(JCheckBox chk){ 
            this.chk   =   chk; 
            chk.addActionListener(new CheckBoxListener());
            } 
             //其中主要要实现这个函数 
            public   Component   getTableCellRendererComponent(JTable   arg0,   Object   value,   boolean   isSelected,   boolean   arg3,   int   arg4,   int   arg5)   { 
            this.chk.setSelected(Boolean.TRUE   ==   value); 
            this.chk.setEnabled(isSelected); 
            this.chk.setHorizontalAlignment(JCheckBox.CENTER); 
            return   this.chk; 
            } 
        }
        
        class CheckBoxListener implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                JCheckBox cb = (JCheckBox)e.getSource();
                if(cb.isSelected()){
                    System.out.println("选择到了");
                }
            }
        }
        
        public static void main(String[] args) {
            new TestTableChange();
        }
        
    }
    [/code]
      

  8.   

    先谢谢各位的指点!
    恩,小弟学了2个月JAVA了,还是个菜鸟中的菜鸟,这个问题想了一天了,在网上也找了好久 ,一直没解决。写那个渲染器,和编辑器是为了能显示和编辑CHECKBOX,现在就是监听不到。或者如果能监听table的checkbox的那一列某个单元格是否被点击了(我发现只要点击到那一列的区域checkbox就响应了),好像麻烦点也能绕弯实现。可是小弟这方面也没搞明白。
    现在急需有个给我改好的列子程序出现,期盼中。
      

  9.   

    swt   swing 好长时间没用了. 关注
      

  10.   

    JDK安装目录\demo\jfc\SwingSet2 这儿有个所有 Swing 组件的演示程序,源代码注释图片资源齐全,当然对 JTable 的演示也很到位且代码简单,可以参考一下。
      

  11.   

    六楼的修改后的程序运行出来了,是解决了我的问题,非常感谢,也非常开心!小弟有幸有你们指点,继续追加100分,再请教同样的问题:跟上面的运行出的界面一样,boolean类型数看上去也是CHECKBOX,希望能直接监听表的的每个boolean值得到同样的效果,即希望通过它来实时监听到哪些行被钩上了。新代码附上,如果我说的不清楚,跑起来就知道我的意图了。大虾们帮小弟这种监听怎么去做。希望得到6楼那种回复。前人种树后人乘凉,你们的回复都是我们初学者的宝贝,这里先谢谢大家了。import java.awt.BorderLayout;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;public class TestTableChange2 extends JFrame {     
        JScrollPane tsp;
        JTable table;  
        public TestTableChange2(){
            this.setBounds(400, 400, 400, 400);
            init();
            this.setVisible(true);
        }
        private void init() {
            String[] columnNames = {"选择情况","课程编号","课程名称"};
            Object[][] obj = {{new Boolean(true),"01","语文"},{new Boolean(true),"02","数学"},{new Boolean(true),"03","历史"}};
            DefaultTableModel model = new DefaultTableModel(obj,columnNames);
            table = new JTable(model);
            tsp = new JScrollPane(table);
            this.add(tsp,BorderLayout.CENTER); 
        }
       
        public static void main(String[] args) {
            new TestTableChange();
        }
    }
      

  12.   


    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;import javax.swing.DefaultCellEditor;
    import javax.swing.JCheckBox;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.table.TableColumn;public class TestTableChange extends JFrame implements ItemListener{     
        JScrollPane tsp;
        JTable table;  
        JCheckBox cb1 = new JCheckBox();
        JCheckBox cb2 = new JCheckBox();
        JCheckBox cb3 = new JCheckBox();
        JCheckBox[] boxes=new JCheckBox[3];
        public TestTableChange(){
            this.setBounds(400, 400, 400, 400);
            init();
            this.setVisible(true);
        }
        private void init() {/*        cb1.addActionListener(new CheckBoxListener());
            cb2.addActionListener(new CheckBoxListener());
            cb3.addActionListener(new CheckBoxListener());*/
            
            cb1.addItemListener(this);
            cb1.setName("cb1");
            cb2.addItemListener(this);
            cb2.setName("cb2");
            cb3.addItemListener(this);
            cb3.setName("cb3");
            boxes[0]=cb1;
            boxes[1]=cb2;
            boxes[2]=cb3;
            String[] columnNames = {"选择情况","课程编号","课程名称"};
            Object[][] obj = {{cb1,"01","语文"},{cb2,"02","数学"},{cb3,"03","历史"}};
            DefaultTableModel model = new DefaultTableModel(obj,columnNames);
            table = new JTable(model);
            TableColumn   column   =   table.getColumnModel().getColumn(0); 
            //设置编辑器 
            column.setCellEditor(new   DefaultCellEditor(new   JCheckBox())); 
            //设置渲染器 
            column.setCellRenderer(new   CheckBoxRenderer(boxes)); 
            
            tsp = new JScrollPane(table);
            this.add(tsp,BorderLayout.CENTER); 
        }
        //CheckBoxRenderer   是一个自己编写的实现TableCellRenderer接口的类 
        class   CheckBoxRenderer   implements   TableCellRenderer{ 
            public   JCheckBox   chk; 
            private JCheckBox[] boxes;
            public   CheckBoxRenderer(){ 
          //  this.chk   =   new   JCheckBox(); 
            } 
            public CheckBoxRenderer(JCheckBox[] boxes){
             this.boxes=boxes;
            }
             //其中主要要实现这个函数 
            public   Component   getTableCellRendererComponent(JTable table,
                    Object value,
                    boolean isSelected,
                    boolean hasFocus,
                    int row,
                    int column)   {
             chk=boxes[row];
             chk.setSelected(Boolean.valueOf(value.toString())); 
           //  chk.setEnabled(isSelected); 
             chk.setHorizontalAlignment(JCheckBox.CENTER); 
             return   chk; 
            } 
        }
        
        class CheckBoxListener implements ActionListener {
            public void actionPerformed(ActionEvent e) {
             System.out.println("action");
                JCheckBox cb = (JCheckBox)e.getSource();
                if(cb.isSelected()){
                    System.out.println("选择到了");
                }
            }
        }
        
        public static void main(String[] args) {
            new TestTableChange();
        }
    public void itemStateChanged(ItemEvent e) {
    JCheckBox box=(JCheckBox)e.getItem();
    System.out.println(box.getName()+" is selected");
    for(int i=0;i<boxes.length;i++){
    System.out.println(boxes[i].isSelected()?boxes[i].getName()+"当前被选中":boxes[i].getName()+"当前没有被选中");
    }
    }
    }不知道你具体什么意思,看看吧
      

  13.   


    import java.awt.BorderLayout;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;public class TestTableChange2 extends JFrame {     
        JScrollPane tsp;
        JTable table;  
        public TestTableChange2(){
            this.setBounds(400, 400, 400, 400);
            init();
            this.setVisible(true);
        }
        private void init() {
            String[] columnNames = {"选择情况","课程编号","课程名称"};
            Object[][] obj = {{new Boolean(true),"01","语文"},{new Boolean(true),"02","数学"},{new Boolean(true),"03","历史"}};
            DefaultTableModel model = new DefaultTableModel(obj,columnNames);
            table = new JTable(model);
            tsp = new JScrollPane(table);
            this.add(tsp,BorderLayout.CENTER); 
        }
       
        public static void main(String[] args) {
         //这里有用的代码好像就是下面这么一句哦
         //你根本就没有用到TestTableChange2类啊
         //下面这个不还是用的以前那个类嘛......
            new TestTableChange();
        }
    }
      

  14.   

    运行jdk中的例子,它的readme.txt似乎有点错误
    java -classpath $(JDBCHOME):TableExample.jar TableExample,冒号应该是分号。例下的命令是能够运行起来的,运行起来后还需要配置数据库,我使用的是mysql数据库java -cp D:\share\apache-tomcat-5.5.17\apache-tomcat-5.5.17\server\lib\mysql-connector-java-5.0.4-bin.jar;C:\Sun\AppServer\jdk\demo\jfc\TableExample\TableExample.jar TableExample配置数据库
    Dataurl:
    jdbc:mysql://127.0.0.1:3306/poentity?useUnicode=true&#38;characterEncoding=gbk
    Driver:
    com.mysql.jdbc.Driver
      

  15.   

    如下代码  希望那位大侠 能帮小弟改为6楼的运行效果, 追加100分  ,解决的独享50 分,留言给意见的也有分。前人种树后人乘凉,前辈们多给我们种种树吧。
    import java.awt.BorderLayout;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;public class TestTableChange2 extends JFrame {     
        JScrollPane tsp;
        JTable table;  
        public TestTableChange2(){
            this.setBounds(400, 400, 400, 400);
            init();
            this.setVisible(true);
        }
        private void init() {
            String[] columnNames = {"选择情况","课程编号","课程名称"};
            Object[][] obj = {{new Boolean(true),"01","语文"},{new Boolean(true),"02","数学"},{new Boolean(true),"03","历史"}};
            DefaultTableModel model = new DefaultTableModel(obj,columnNames);
            table = new JTable(model);
            tsp = new JScrollPane(table);
            this.add(tsp,BorderLayout.CENTER); 
        }
       
        public static void main(String[] args) {
            new TestTableChange2();
        }
    }
      

  16.   


    import java.awt.BorderLayout;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;public class TestTableChange2 extends JFrame implements MouseListener{     
        JScrollPane tsp;
        JTable table;  
        public TestTableChange2(){
            this.setBounds(400, 400, 400, 400);
            init();
            this.setVisible(true);
        }
        private void init() {
            String[] columnNames = {"选择情况","课程编号","课程名称"};
            Object[][] obj = {{new Boolean(true),"01","语文"},{new Boolean(true),"02","数学"},{new Boolean(true),"03","历史"}};
            DefaultTableModel model = new DefaultTableModel(obj,columnNames);
            table = new JTable(model);
            tsp = new JScrollPane(table);
            this.add(tsp,BorderLayout.CENTER); 
            table.addMouseListener(this);
        }
       
        public static void main(String[] args) {
            new TestTableChange2();
        }
    public void mouseClicked(MouseEvent e) {
    int row=table.getSelectedRow();
    int column=0;
    System.out.println("第"+(row+1)+"行:"+table.getValueAt(row, column));
    }
    public void mouseEntered(MouseEvent e) {
    }
    public void mouseExited(MouseEvent e) {
    }
    public void mousePressed(MouseEvent e) {
    }
    public void mouseReleased(MouseEvent e) {
    }
    }看看这是不是你需要的