JTable监听器问题

5

我在我的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个回答

4

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

table.rowAtPoint();

-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(...)
}
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接