有人可以告诉我为什么这不起作用?由于某种原因,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());
}
});
答案 0 :(得分:1)
详细说明@BlackBox所说的,table
不是类变量,但是你添加的鼠标监听器在技术上是一个新的内部类。除非将table
变量标记为final
,否则该新类无法访}。
答案 1 :(得分:1)
将表变量声明为final
。
有关详细信息,请参阅此Wiki页面上的Final and inner classes
:
http://en.wikipedia.org/wiki/Final_%28Java%29#Final_variables
基本上,将变量标记为final会告诉编译器该值永远不会改变。此指示允许编译器捕获和存储内部类的值,否则在运行时无法执行这些操作。