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限り、変数にアクセスできません。finaltabletable

于 2013-10-01T14:53:18.957 に答える
1

テーブル変数を として宣言しますfinal

詳細については、次のFinal and inner classesWiki ページを参照してください: http://en.wikipedia.org/wiki/Final_%28Java%29#Final_variables

基本的に、変数を final としてマークすると、値が変更されないことがコンパイラに伝えられます。この指示により、コンパイラは、他の方法では実行時に実行できなかった内部クラスの値をキャプチャして格納できます。

于 2013-10-01T14:54:56.277 に答える