2010-05-29 78 views
5

我添加了一个鼠标点击列表到我的jtable,当我双击该行时,会相应地弹出一个窗口。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,只有当我选择第一排,然后第二行,然后我就可以得到正确的数据。如果我删除了鼠标监听器,那么问题就解决了。是否因为我在鼠标点击侦听器上做错了事情?

回答

4

如果你只是想知道被点击的行,那么你不需要选择监听器。只是使用:

table.rowAtPoint(); 
+0

你会如何使用它? – 2010-07-14 00:57:39

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

-1不必要的粗鲁。 – Pops 2011-02-13 06:27:50