0

有人可以告诉我为什么这不起作用吗?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());

            }

        }); 
4

2 回答 2

1

详细说明@BlackBox 所说table的不是类变量,但您添加的鼠标侦听器在技术上是一个新的内部类。该新类无权访问该table变量,除非它被标记为final或除非包含这两者的类table和鼠标侦听器具有对table.

于 2013-10-01T14:53:18.957 回答
1

将表变量声明为final

有关更多信息,请参阅Final and inner classes此 wiki 页面: http ://en.wikipedia.org/wiki/Final_%28Java%29#Final_variables

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

于 2013-10-01T14:54:56.277 回答