在 JTable 上註冊滑鼠監聽器,透過 MouseEvent.getPoint() 取得點擊座標,再呼叫 JTable.rowAtPoint(Point) 即可獲得該座標所在的列索引(0 起算)。
JTable table = new JTable(cellData, columnNames);
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("mouseClicked()");
System.out.println("總列數:" + table.getRowCount());
Point pt = e.getPoint();
int row = table.rowAtPoint(pt); // 回傳 0-based 索引,若點擊在列外則回傳 -1
System.out.println("點擊列號(1-based):" + (row + 1));
}
});
| 方法 | 回傳值 | 說明 |
|---|---|---|
e.getPoint() | Point | 滑鼠事件相對於元件左上角的座標 (x, y) |
table.rowAtPoint(pt) | int | 座標對應的列索引(0 起算),若不在任何列上則回傳 -1 |
table.getRowCount() | int | 表格總列數(資料模型行數) |
mouseClicked 或 mousePressed 中判斷 e.isPopupTrigger(),對點擊列顯示操作選單。e.getClickCount() == 2 並取得列號後啟動編輯器。DragGestureRecognizer 取得起始列。rowAtPoint 回傳的是視圖索引(View index),若表格有排序或過濾,需轉換為模型索引:table.convertRowIndexToModel(viewRow)。rowAtPoint 回傳 -1,可改用 table.columnAtPoint(pt) 取得欄位。MouseAdapter 而非實作 MouseListener,僅覆寫需要的方法。