我在JTable
中搜索排序并且我引用了很多文章,但无法获得对表格进行排序的最简单方法。我也知道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<String[]> myEntries = reader.readAll();
String[][] rowData = myEntries.toArray(new String[0][]);
String[] columnNames = { "People", "Place", "Organisation", "Event", "Mentions" };
DefaultTableModel tableModel = new DefaultTableModel(rowData, columnNames);
答案 0 :(得分:21)
根据How to Use Tables: Sorting and Filtering
JTable table = new JTable(tableModel);
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(table.getModel());
table.setRowSorter(sorter);
List<RowSorter.SortKey> 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<TableModel> sorter = new TableRowSorter<TableModel>(table.getModel());
table.setRowSorter(sorter);
List<RowSorter.SortKey> 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);
//...
}
这将为您提供&#34;视图&#34;中的数据。 (或排序)订单...
答案 1 :(得分:1)
尝试使用此
table.setAutoCreateRowSorter(true);