2010-05-29 11 views
5

Tôi đã thêm một người nhấp chuột vào jtable của tôi, khi tôi nhấp đúp vào hàng, sẽ bật lên một cửa sổ cho phù hợp.Vấn đề về trình nghe 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(...) 
} 
}); 

Mã này tôi đã sử dụng để truy xuất hàng đã chọn.

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; 
} 

Trong trường hợp của tôi, tôi nhận ra khi tôi nhấp vào hàng thứ hai trong thời gian đầu tiên, tôi nhận được null cho selectedRow, chỉ khi tôi chọn dòng đầu tiên sau đó hàng thứ hai, sau đó tôi có thể nhận được dữ liệu chính xác. Và nếu tôi loại bỏ trình nghe chuột thì vấn đề sẽ được giải quyết. Có phải vì tôi làm điều gì đó sai ở người nghe click chuột?

Trả lời

4

Nếu bạn chỉ muốn biết hàng nào đã được nhấp thì bạn không cần người nghe lựa chọn. Chỉ cần sử dụng:

table.rowAtPoint(); 
+0

Bạn sẽ sử dụng cái này như thế nào? –

-1

Bạn đang làm sai cách. Xóa hoàn toàn phương thức getSelectedRow() hiện tại của bạn và không bao giờ cố gắng mã hóa một cái gì đó tương tự. Đây là phiên bản tốt hơn:

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 vì không cần thiết thô lỗ. – Pops