JTable监听器问题

时间:2010-05-29 15:17:02

标签: java swing mouse jtable listener

我在我的jtable中添加了一个鼠标点击列表器,当我双击该行时,会相应地弹出一个窗口。

jTable.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
double amount = Double.parseDouble(jTable.getValueAt(getSelectedRow(), 4).toString());
String remarks = jTable.getValueAt(getSelectedRow(), 3).toString();
String transactionID = jTable.getValueAt(getSelectedRow(), 1).toString();
        new EditFrame(...)
}
});

这段代码我用来检索选定行的行。

public int getSelectedRow() {
jTable.getSelectionModel().addListSelectionListener(
new ListSelectionListener() {
 public void valueChanged(ListSelectionEvent event) {
  int viewRow = jTable.getSelectedRow();
  selectedRow = viewRow;
  System.out.println(viewRow);
 }
});
return selectedRow;
}

在我的情况下,我意识到当我第一次点击第二行时,我为selectedRow获取null,只有当我选择第一行然后第二行时,我才能获得正确的数据。如果我删除了鼠标监听器,那么问题就解决了。是因为我在鼠标点击监听器上做错了吗?

2 个答案:

答案 0 :(得分:4)

如果您只是想知道点击了哪一行,那么您不需要选择侦听器。只需使用:

table.rowAtPoint();

答案 1 :(得分:-1)

你这样做是错误的。完全删除当前的getSelectedRow()方法,不要尝试编写类似的代码。这是一个更好的版本:

jTable.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
int selectedRow = jTable.getSelectedRow();
double amount = Double.parseDouble(jTable.getValueAt(selectedRow, 4).toString());
String remarks = jTable.getValueAt(selectedRow, 3).toString();
String transactionID = jTable.getValueAt(selectedRow, 1).toString();
        new EditFrame(...)
}
});