当前位置: 首页 > 知识库问答 >
问题:

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

顾乐家
2023-03-14
| People  | Place |   Organisation    | Event    | Mentions |
_____________________________________________________________
| Ramanuj | India | Tata Consultancy  | Party'14 |  500000  |
| Prankster | USA | Microsoft Pvt Ltd | Party'14 |  900000  |
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);

共有1个答案

公孙锋
2023-03-14

按照如何使用表:排序和筛选

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);
     //...
 }
 类似资料:
  • 问题内容: 有没有办法以编程方式对JTable进行排序? 我的JTable排序工作正常(使用setRowSorter),以便当用户按任意列时,表将被排序。 我知道,SWingX JXTable可能可以工作,但我不想麻烦,因为其他所有事情现在都可以正常工作,而且我不知道NetBeans的可视化编辑器如何处理JXTable等。 编辑: 选定的答案是指我的声明(现已删除),该声明对Sun的页面的答案不起

  • 问题内容: 我有一个JTable的第一行为空白。现在,当我通过单击列对表进行排序时,空白行位于底部。如果我在空白行中插入内容并进行排序,则该行将相应放置。即使已排序,如何跟踪其行索引。我需要访问该行,但是如果用户进行排序,那么我将失去行索引,因为它不再是第一行。 问题答案: 您所使用的假设Java 6中新增的东西,我认为你需要看看是什么方法和在类。你会做类似的事情 从模型中找出哪个可见行索引实际上

  • 问题内容: 我有一个从控制器传递到JSP的Player对象的列表,我想以几种不同的方式在同一页面上显示它们: 按名称排序的菜单 按赢/输百分比排序的列表 我可以在模型中放置单独的排序后的副本,但是处理显示相同列表的不同方法似乎更像是视图的责任,因此,我希望避免将逻辑放入控制器中。我已经有几个实现Comparator的类来帮助实际排序。 在JSP中执行此操作的最佳方法是什么? 我可以在将列表传递到其

  • 已经存在一个jtable,我需要动态添加一列,然后为该列设置表格单元格呈现器,单元格呈现器是带有图标的jlabel。我已经做完了。 我的问题是:现在我需要根据表格单元格呈现器中使用的不同图标对列进行排序,那么如何做到这一点呢?谢谢你。

  • 问题内容: 我有一个JTable,其属性AutoCreateRowSorter设置为true。单击时效果很好,但如果单击时仅将鼠标移动1px,则不会出现排序,这在某些情况下不舒服。如何解决这个问题? UPD我只想在释放鼠标时显示排序。 问题答案: 肮脏的方法(请阅读: 如果您不是绝对地绝望,请确切地知道自己在做什么!请不要这样做 ),方法是挂接到uiDelegate安装的MouseListener

  • 问题内容: 我的桌子上有Symbol和Weight(仅两列)列。我需要根据符号的权重对表格进行排序,这是我可以做到的 但这不会改变我的表,但是会给我排序的输出(临时)。 我想对表格进行永久排序。我怎样才能做到这一点? 问题答案: 您可以使用ALTER TABLE执行此操作 FE 但是请注意,插入和删除后,该表不会保持此顺序