如何以最短的方式对JTable进行排序?

我在JTable中搜索Sorting并且我引用了许多文章,但无法获得对表进行排序的最简单方法。 我也知道TableRowSorter可能在某种程度上有所帮助,但不知道如何。 作为JTable新手,我在这里创建了一个新问题。

我的表结构是这样的

 | People | Place | Organisation | Event | Mentions | _____________________________________________________________ | Ramanuj | India | Tata Consultancy | Party'14 | 500000 | | Prankster | USA | Microsoft Pvt Ltd | Party'14 | 900000 | 

我想要的是根据第4列(“提及”)对我的表Descending进行排序。 如果计数(提及)相同,则应按第1列(“人员”)排序升序

 CSVReader reader = new CSVReader(new FileReader(file)); List myEntries = reader.readAll(); String[][] rowData = myEntries.toArray(new String[0][]); String[] columnNames = { "People", "Place", "Organisation", "Event", "Mentions" }; DefaultTableModel tableModel = new DefaultTableModel(rowData, columnNames); 

根据如何使用表:排序和筛选

 JTable table = new JTable(tableModel); TableRowSorter sorter = new TableRowSorter(table.getModel()); table.setRowSorter(sorter); List sortKeys = new ArrayList<>(25); sortKeys.add(new RowSorter.SortKey(4, SortOrder.ASCENDING)); sortKeys.add(new RowSorter.SortKey(0, SortOrder.ASCENDING)); sorter.setSortKeys(sortKeys); 

更新

你确定它会排序吗?

…是

表

 import java.awt.EventQueue; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.RowSorter; import javax.swing.SortOrder; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import javax.swing.table.TableRowSorter; public class Test { public static void main(String[] args) { new Test(); } public Test() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { ex.printStackTrace(); } DefaultTableModel model = new DefaultTableModel(new String[]{"People", "Place", "Organisation", "Event", "Mentions"}, 0); model.addRow(new Object[]{"Prankster", "USA", "Microsoft Pvt Ltd", "Party'14", 900000}); model.addRow(new Object[]{"Ramanuj", "India", "Tata Consultancy", "Party'14", 500000}); model.addRow(new Object[]{"Banana", "India", "Tata Consultancy", "Party'14", 500000}); JTable table = new JTable(model); TableRowSorter sorter = new TableRowSorter(table.getModel()); table.setRowSorter(sorter); List sortKeys = new ArrayList<>(25); sortKeys.add(new RowSorter.SortKey(4, SortOrder.ASCENDING)); sortKeys.add(new RowSorter.SortKey(0, SortOrder.ASCENDING)); sorter.setSortKeys(sortKeys); JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new JScrollPane(table)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } } 

更新

您可以直接从视图中提取数据…

  for (int row = 0; row < table.getRowCount(); row++) { String people = table.getValueAt(row, 0).toString(); String place = table.getValueAt(row, 1).toString(); String organisation = table.getValueAt(row, 2).toString(); String event = table.getValueAt(row, 3).toString(); int mentions = (int)table.getValueAt(row, 4); //... } 

这将以“视图”(或排序)顺序为您提供数据...