确定点击了哪个JTable单元格

22
当用户在JTable上单击单元格时,我该如何确定所单击单元格的行和列?我该如何在JLabel中显示这些信息?
5个回答

35
现有答案可以工作,但如果你不启用单元格选择功能,可能会有更好的替代方法。在你的MouseListener中,像这样做:
public void mouseClicked(java.awt.event.MouseEvent event) {
    int row = theTable.rowAtPoint(event.getPoint());
    int col = theTable.columnAtPoint(event.getPoint());
    // ...

这个答案很棒。 当使用右键时,getSelectedRow()或getSelectedColumn()无法工作。 - Jesus
就像(几乎)所有的Java Swing“解决方案”一样,sorcks:很烂,但是能用。 - Felype

17

您可以使用以下JTable方法来检索所选单元格的行和列:

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

同时向表格添加一个 SelectionListener,以便在选定表格时捕获事件。


2
+1,除非ListSelectionListener被添加到ListSelectionModel而不是JTable。 - camickr
6
你可能还想在 JTable 的 ColumnModel 中添加一个 ListSelectionListener,以防止选定的行保持不变但选定的列发生变化:table.getColumnModel().getSelectionModel().addListSelectionListener(...); - Uhlen

5

这对我来说有效!!!

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) {


    }
 }
});

此解决方案承认在JTable组件中单击空白区域的可能性。 - Queeg

1

你尝试过使用addMouseListener()吗?我希望你正在使用Swing的JTable。


是的,我正在使用Swing,并且没有尝试过addMouseListener。现在会尝试一下...谢谢。 - Cristian
这有点令人困惑,你能给一些指针或链接吗?我已经搜索了很久,但没有结果。我只想将所选jTable单元格的行和列添加到jLabel中... - Cristian
我认为这不是解决问题的好方法。MouseEvent 不容易转换为列和行。请参考 Develman 的答案。 - jzd
我并不是想将鼠标监听器添加到表格本身。通常,表格单元格由表格模型管理的某些Swing组件表示。我建议将监听器添加到此组件。 - AlexR
1
-1,单元格通过绘制称为渲染器的组件图像来表示。由于它不是真正的组件,因此无法向渲染器添加侦听器。如果您要使用MouseListener,则确实需要将其添加到表中,但没有必要这样做,因为这就是ListSelectionListener的目的。 - camickr

1
我发现当列被隐藏/重新排序时,columnAtPoint 返回可见列的索引,这不是我需要的。适用于我的代码是:
int row = theTable.convertRowIndexToModel(theTable.rowAtPoint(event.getPoint()));
int col = theTable.convertColumnIndexToModel(theTable.columnAtPoint(event.getPoint()));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接