【问题标题】:Java JTable getting the data of the selected rowJava JTable获取选定行的数据
【发布时间】:2015-06-03 10:39:07
【问题描述】:

是否有任何方法用于获取所选行的数据?我只想简单地单击带有数据的特定行,然后单击将在控制台中打印数据的按钮。

【问题讨论】:

  • 我试过谷歌,但它主要只显示 getValueAt() 。我只是缩小了我的问题范围,因为这个 JTable 是我们 CaseStudy 的一部分。
  • 尽量不要考虑一个整体的大解决方案,而是使用小块。 1. 获取选中的行。 2.获取你从行中获得的对象的内容。另请参阅 ManyQuestions 的答案

标签: java swing jtable tablemodel


【解决方案1】:

就这么简单:

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

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,但它没有解释为什么或如何回答这个问题。请include an explanation for your code,因为这确实有助于提高您的帖子质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。您可以使用edit 按钮改进此答案以获得更多选票和声誉!
【解决方案2】:

http://docs.oracle.com/javase/7/docs/api/javax/swing/JTable.html

你会在里面找到这些方法:

getValueAt(int row, int column)
getSelectedRow()
getSelectedColumn()

混合使用这些来实现您的结果。

【讨论】:

    【解决方案3】:

    使用来自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);
      }
    
    });
    

    see here.

    【讨论】:

      【解决方案4】:

      您可以使用以下代码来获取表格中所选行的第一列的值。

      int column = 0;
      int row = table.getSelectedRow();
      String value = table.getModel().getValueAt(row, column).toString();
      

      【讨论】:

      • 这个是准确的答案。 +1
      • 不是@5377037,因为代码在模型中索引之前无法将坐标从视图转换为模型。如果对表进行排序,它将返回不正确的结果。不仅如此,如果没有选中的行,table.getSelectedRow() 的返回可以是-1。
      【解决方案5】:

      如果要获取整行的数据,可以使用下面这个组合

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

      其中“tableModel”是可以像这样访问的表的模型

      (DefaultTableModel) jTable.getModel();
      

      这将返回整行数据。

      我希望这对某人有帮助

      【讨论】:

      • 嗨,达米洛拉。在将行索引用作数据向量(模型向量)中的索引之前,您的示例不会将行索引从视图索引转换为模型索引。对表格进行排序时,您的样本将返回不正确的结果。此示例也无法检查是否有效选择了行。
      • 需要用JTable方法convertRowIndexToModel进行转换。像这样:int modelIndex = table.convertRowIndexToModel(selectedRow);
      猜你喜欢
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      相关资源
      最近更新 更多