代码之家  ›  专栏  ›  技术社区  ›  Preston White

在java中从jtable中选择排序数据

  •  -1
  • Preston White  · 技术社区  · 6 年前

    我有一个jtable,它将数据从一个excel文件加载到jtable中。每一行数据都有一个唯一的id号,我有一个函数,可以按id对数据进行数字排序。单击表中的特定行时,该数据ID将打印到控制台。这在数据未排序之前开始工作,但在数据排序之后,将错误的id打印到控制台。到目前为止,我得到的是:第一个函数按id对数据进行排序,第二个函数从jtable获取(错误的)id并将其打印到控制台。如何修复此问题以便选择正确的ID?

    private void sort(int columnIndex){
        TableRowSorter<TableModel> sorter = new TableRowSorter<>(jTable1.getModel());
        jTable1.setRowSorter(sorter);
        List<RowSorter.SortKey> sortKeys = new ArrayList<>();
        sortKeys.add(new RowSorter.SortKey(columnIndex, SortOrder.ASCENDING));
        sorter.setSortKeys(sortKeys);
        sorter.sort();
    }
    
    
    
    private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {                                     
            TableModel dtm = (DefaultTableModel) jTable1.getModel();
            int index = jTable1.getSelectedRow();
            String ID = dtm.getValueAt(index, 1).toString();
            System.out.println(ID);            
    }
    

    示例1:数据未排序,我选择了作业ID 8953528,所以像我最初计划的那样,将“8953528”打印到控制台。

    enter image description here

    示例2:现在对数据进行排序,我选择了作业ID 8793343,但不再打印该ID,而是再次打印“8953528”。注意:在这两种情况下,我都从第三行选择了数据。

    enter image description here

    2 回复  |  直到 6 年前
        1
  •  2
  •   Mark Jeronimus    6 年前

    当您在排序的 JTable , getSelectedRow() 给你“视觉”行索引。您想要的(为了访问数据)是“model”行索引。

        index = sorter.convertRowIndexToModel(index);
    
        2
  •  0
  •   Preston White    6 年前

    这就是我如何修复它的方法

    private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {                                     
            TableRowSorter<TableModel> sorter = new TableRowSorter<>(jTable1.getModel());
            int index = jTable1.getSelectedRow();
            index = sorter.convertRowIndexToModel(index);
            System.out.println(jTable1.getValueAt(index, 0));  
    }