[英]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.