从Java中的jTable选择排序的数据

时间:2018-06-19 14:36:00

标签: java swing

我有一个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 个答案:

答案 0 :(得分:2)

在已排序的JTable上单击一行时,getSelectedRow()为您提供“可视”行索引。您想要(以便访问数据)的是“模型”行索引。

    index = sorter.convertRowIndexToModel(index);

答案 1 :(得分:0)

这是我能够解决的方法

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