2010-05-29 114 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