Java JTable获取所选行的数据

22
有没有用于获取所选行数据的方法?我只是想简单地点击具有数据的特定行,然后单击一个按钮,在控制台中打印该数据。 enter image description here

我尝试使用谷歌搜索,但大多数结果都只涉及到getValueAt()。我缩小了问题范围,因为这个JTable是我们CaseStudy的一部分。 - ZeroCool
1
尝试不要考虑整个大解决方案,而是使用小块。1.获取所选行。2.获取从该行获得的对象的内容。还请参阅ManyQuestions的答案。 - Zorian
5个回答

48

43
您可以使用以下代码获取您的表格中所选行的第一列的值。
int column = 0;
int row = table.getSelectedRow();
String value = table.getModel().getValueAt(row, column).toString();

2
这是精确的答案。+1 - user1773603
代码存在问题,因为它在模型中索引坐标之前未能将视图坐标转换为模型坐标。如果表格被排序,它将返回不正确的结果。此外,如果没有选定行,则table.getSelectedRow()的返回值可能为-1。 - TT.

13

如果您想获取整行数据,您可以使用下面的组合

tableModel.getDataVector().elementAt(jTable.convertRowIndexToModel(jTable.getSelectedRow()));

“tableModel”是表格的模型,可以通过以下方式访问

(DefaultTableModel) jTable.getModel();

这将返回整行数据。

希望这能帮助到某些人。


1
嗨Damilola,你的样例没有在将视图索引转换为模型索引之前将行索引转换成为数据向量(即模型向量)中的索引。当表格被排序时,你的样例将返回不正确的结果。此外,该样例还未检查所选行是否有效。 - TT.
1
您需要使用JTable方法convertRowIndexToModel进行转换。像这样:int modelIndex = table.convertRowIndexToModel(selectedRow); - MadMike

2

就像这样简单:

    tbl.addMouseListener(new MouseListener() {
        @Override
        public void mouseReleased(MouseEvent e) {
        }
        @Override
        public void mousePressed(MouseEvent e) {
            String selectedCellValue = (String) tbl.getValueAt(tbl.getSelectedRow() , tbl.getSelectedColumn());
            System.out.println(selectedCellValue);
        }
        @Override
        public void mouseExited(MouseEvent e) {
        }
        @Override
        public void mouseEntered(MouseEvent e) {
        }
        @Override
        public void mouseClicked(MouseEvent e) {
        }
    });

2
虽然这段代码片段可能解决了问题,但它并没有解释为什么或者如何回答这个问题。请在您的代码中包含解释,因为这真的有助于提高您的帖子质量。记住,您正在为未来的读者回答问题,而这些人可能不知道您提出代码建议的原因。您可以使用[编辑]按钮改进此答案以获得更多的投票和声望! - Brian Tompsett - 汤莱恩

1

使用ListSelectionModel

ListSelectionModel cellSelectionModel = table.getSelectionModel();
cellSelectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

cellSelectionModel.addListSelectionListener(new ListSelectionListener() {
  public void valueChanged(ListSelectionEvent e) {
    String selectedData = null;

    int[] selectedRow = table.getSelectedRows();
    int[] selectedColumns = table.getSelectedColumns();

    for (int i = 0; i < selectedRow.length; i++) {
      for (int j = 0; j < selectedColumns.length; j++) {
        selectedData = (String) table.getValueAt(selectedRow[i], selectedColumns[j]);
      }
    }
    System.out.println("Selected: " + selectedData);
  }

});

点击这里。


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