我已經採取了從另一個問題,這個代碼,並希望有人能澄清幾點:JTable的鼠標監聽
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
int r = table.rowAtPoint(e.getPoint());
if (r >= 0 && r < table.getRowCount()) {
table.setRowSelectionInterval(r, r);
} else {
table.clearSelection();
}
int rowindex = table.getSelectedRow();
if (rowindex < 0)
return;
if (e.isPopupTrigger() && e.getComponent() instanceof JTable) {
JPopupMenu popup = createYourPopUp();
popup.show(e.getComponent(), e.getX(), e.getY());
}
}
});
我的理解是,它定義爲「r」行獲取行的鼠標事件點。但爲什麼'rowindex'使用table.getSelectedRow()初始化?爲什麼不使用變量'r'。他們不是一回事嗎?
也 - 我很困惑e.isPopupTrigger()。我閱讀文檔,並將它引用爲返回mouseevent是否爲彈出窗口的觸發器......訣竅顯然是在名稱中 - 但我不確定哪些條件使其成爲真或假(特別是彈出.show(),其第一個參數是調用者,在if語句中)。
對不起,我只是不想盲目複製代碼!
感謝
編輯 - 我只是重讀你的答案,感謝您的快速回復,雖然 – NickW
啊,感謝您的額外信息 - 我現在得到兩個變量。 RE isPopupTrigger() - 我仍然不知道它甚至在任何平臺上。從我的(天真的)看來,它看起來像唯一表示mouseevent與彈出窗口相關的是if語句的主體。考慮到if塊條件,這是沒有意義的。 – NickW
@NickW,看到更新的答案,我希望更好地解釋爲什麼rowAtPoint()和getSelectedRow()可以返回不同的值。 – camickr