table.getSelectedRow()不起作用

时间:2013-10-01 14:48:05

标签: java swing jtable rows selected

有人可以告诉我为什么这不起作用?由于某种原因,System.out.println(table.getSelectedRow());行是红色的!我希望每次单击一行以显示选择了哪一行。我在这里错过了什么吗?

            table = new JTable(data, columnNames) {


                public Class getColumnClass(int column) {
                    for (int row = 0; row < getRowCount(); row++) {
                        Object obj = getValueAt(row, column);


                        if (obj != null) {
                            return obj.getClass();
                        }
                    }

                    return Object.class;
                }


            };


        JScrollPane scroll = new JScrollPane(table);
        getContentPane().add(scroll);


        JPanel panel = new JPanel();
        getContentPane().add(panel, BorderLayout.SOUTH);



        table.addMouseListener(new MouseListener() {

            public void mousePressed(MouseEvent e) {

                System.out.println(table.getSelectedRow());

            }

        }); 

2 个答案:

答案 0 :(得分:1)

详细说明@BlackBox所说的,table不是类变量,但是你添加的鼠标监听器在技术上是一个新的内部类。除非将table变量标记为final,否则该新类无法访}。

答案 1 :(得分:1)

将表变量声明为final

有关详细信息,请参阅此Wiki页面上的Final and inner classeshttp://en.wikipedia.org/wiki/Final_%28Java%29#Final_variables

基本上,将变量标记为final会告诉编译器该值永远不会改变。此指示允许编译器捕获和存储内部类的值,否则在运行时无法执行这些操作。