2011-01-25 82 views

Trả lời

1

bạn đã thử addMouseListener() chưa? Tôi hy vọng bạn đang sử dụng JTable của Swing.

+0

vâng tôi đang sử dụng Swing và không, tôi chưa thử addMouseListener. sẽ cố gắng ngay bây giờ ... cảm ơn. – Cristian

+0

điều này khá khó hiểu, bạn có thể đưa ra một số gợi ý hoặc một số liên kết không? Tôi đã tìm kiếm và không có kết quả. Tôi chỉ muốn hàng & cột của jTable được chọn sẽ được thêm vào trong một jLabel ..... – Cristian

+0

Tôi không nghĩ là một cách hay để giải quyết vấn đề. MouseEvent sẽ không dễ chuyển đổi sang cột và hàng. Xem câu trả lời của Develman. – jzd

17

Bạn có thể sử dụng phương pháp sau đây trên JTable để lấy hàng và cột của ô đã chọn:

int rowIndex = table.getSelectedRow(); 
int colIndex = table.getSelectedColumn(); 

Và thêm một SelectionListener bảng để bắt sự kiện khi bảng được chọn.

+2

+1, ngoại trừ ListSelectionListener được thêm vào ListSelectionModel, không phải JTable. – camickr

+6

Bạn cũng có thể muốn thêm ListSelectionListener vào cột ColumnModel của JTable trong trường hợp hàng đã chọn vẫn giữ nguyên các thay đổi cột đã chọn: table.getColumnModel(). GetSelectionModel(). AddListSelectionListener (...); – Uhlen

32

Câu trả lời hiện có hiệu quả, nhưng có một phương pháp thay thế có thể hoạt động tốt hơn nếu bạn không bật lựa chọn ô. Bên trong số MouseListener của bạn, hãy làm điều gì đó như sau:

public void mouseClicked(java.awt.event.MouseEvent event) { 
    int row = theTable.rowAtPoint(event.getPoint()); 
    int col = theTable.columnAtPoint(event.getPoint()); 
    // ... 
+0

Đạo cụ cho câu trả lời này. getSelectedRow() hoặc getSelectedColumn() không hoạt động khi sử dụng nhấp chuột phải. – Jesus

+0

Giống như (gần như) tất cả các giải pháp Java Swing "", sorcks: Sucks, nhưng hoạt động. – Felype

3

Nó làm việc cho tôi !!!

jTable1.addMouseListener(new java.awt.event.MouseAdapter() { 
@Override 
public void mouseClicked(java.awt.event.MouseEvent evt) { 
    int row = jTable1.rowAtPoint(evt.getPoint()); 
    int col = jTable1.columnAtPoint(evt.getPoint()); 
    if (row >= 0 && col >= 0) { 


    } 
} 
}); 
0

Tôi đã thấy rằng khi cột bị ẩn/sắp xếp lại columnAtPoint trả về chỉ mục cột hiển thị, không phải là thứ tôi cần. Mã làm việc cho tôi là

int row = theTable.convertRowIndexToModel(theTable.rowAtPoint(event.getPoint())); 
int col = theTable.convertColumnIndexToModel(theTable.columnAtPoint(event.getPoint())); 
Các vấn đề liên quan