簡體   English   中英

從Java中的jTable選擇排序的數據

[英]Selecting sorted data from a jTable in Java

我有一個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”打印到控制台。

在此處輸入圖片說明

示例2:現在對數據進行了排序,我選擇了作業ID 8793343,但沒有打印該ID,而是再次打印了“ 8953528”。 注意:在這兩種情況下,我都是從第三行選擇數據。

在此處輸入圖片說明

在排序的JTable上單擊一行時, getSelectedRow()為您提供“可視”行索引。 您想要的(為了訪問數據)是“模型”行索引。

    index = sorter.convertRowIndexToModel(index);

這是我能夠解決的方法

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM