Java 如何知道何时对JTable进行了排序

Java 如何知道何时对JTable进行了排序,java,swing,jtable,Java,Swing,Jtable,在新的行顺序显示在表上之后,我需要知道JTable何时被排序 我试过: getModel().addTableModelListener(new TableModelListener() { @Override public void tableChanged(TableModelEvent e) { System.out.println("change"); } })

在新的行顺序显示在表上之后,我需要知道JTable何时被排序

我试过:

 getModel().addTableModelListener(new TableModelListener() {        
        @Override
        public void tableChanged(TableModelEvent e) {
            System.out.println("change");               
        }
    });  

但是排序后似乎没有调用方法
tableChanged(tablemodeleevent e)

JTable中的排序和相关事件由。它们可以使用

RowSorter允许您通过使用订阅侦听器来侦听排序事件

此侦听器是的接口,侦听器方法接收的实例为。当此事件的结束时间为时,这表示:

[…]内容以某种方式重新排序或转换



请理解:传统的JTable(即遵循规范的实现)不会对模型进行排序。而是对模型的索引数组进行排序。这对于遵循模型/视图范例的UI元素来说是典型的。

JTable中的排序和相关事件由。它们可以使用

RowSorter允许您通过使用订阅侦听器来侦听排序事件

此侦听器是的接口,侦听器方法接收的实例为。当此事件的结束时间为时,这表示:

[…]内容以某种方式重新排序或转换




请理解:传统的JTable(即遵循规范的实现)不会对模型进行排序。而是对模型的索引数组进行排序。这对于遵循模型/视图范例的UI元素是典型的。

模型从不排序,视图排序。视图通过索引映射的方式映射到JTable中的模型。另外,为了清楚起见,您能否解释一下为什么需要知道表的排序时间?我必须从Excel文件中填写JTable。因为我找不到一种方法来对所有的行进行排序,除了那些是单元格标题的行之外,我认为我可以等到JTable被排序,然后找到一种方法来从它们的位置删除单元格标题并将它们放在JTable的顶部。问题是为什么要将“header”值作为行数据的一部分加载。应单独读取第一行以创建表的“列名”。列名显示为JTable的一个单独部分。阅读关于for examples.HI@camickr的Swing教程。实际上,我不知道excel将有多少行标题。我被要求在数据行之前显示excel文件中的所有标题行,即使这些行是空的。我必须复制excel文件的精确表示。JTable允许有许多“标题”行吗?模型从不排序,视图排序。视图通过索引映射的方式映射到JTable中的模型。另外,为了清楚起见,您能否解释一下为什么需要知道表的排序时间?我必须从Excel文件中填写JTable。因为我找不到一种方法来对所有的行进行排序,除了那些是单元格标题的行之外,我认为我可以等到JTable被排序,然后找到一种方法来从它们的位置删除单元格标题并将它们放在JTable的顶部。问题是为什么要将“header”值作为行数据的一部分加载。应单独读取第一行以创建表的“列名”。列名显示为JTable的一个单独部分。阅读关于for examples.HI@camickr的Swing教程。实际上,我不知道excel将有多少行标题。我被要求在数据行之前显示excel文件中的所有标题行,即使这些行是空的。我必须复制excel文件的精确表示。JTable允许有许多“标题”行吗?我已经尝试使用addRowSorterListener()。问题在于,它是在表上显示新行顺序之前调用的。我需要知道表何时更新,因为这个原因:我必须从Excel文件中订购一个JTable。由于我找不到一种方法来对所有行进行排序,除了单元格标题的行(在excel中),我想我可以等到JTable被排序,然后找到一种方法将单元格标题从它们的位置移除,并将它们放在JTable的顶部。@MDP制作您自己的排序器,在任何情况下都会先对标题进行排序。更好的是,将标题值放在表标题中,这样就不会遇到这个问题。头,这就是JTable头的用途。@MDP您还可以为从Excel中获得的每个“表”创建一个JTable,这样您就可以使用JTable头,而不必担心排序问题了?然后用FlowLayout或BoxLayout一个接一个地将这些JTable实例添加到JPanel中?@MDP如果你现在真的不能这样做,那么一种“黑客”方法就是在一个
SwingUtilities.invokeLater中执行你需要执行的操作,它是从我在回答中描述的rowsorter侦听器启动的。这会将您的“处理”放在EDT队列中,然后再处理(希望是在排序之后而不是之前)。@MDP试图强制JTable像Excel页面一样工作将非常困难。此外,试图强制多个JTable控件像一个Excel页面一样工作也是非常困难的。如果我真的必须使用JTable控件来实现这一点,我不需要深入研究,我会使用一个特制的行排序器来实现这一点,并且在行中有元信息来知道每行所属的虚拟表,以及当一行是标头时的元信息。然后根据表id、is_头和数据行进行排序。无论如何:祝你好运:)我已经试过使用addRowSorterListener()。问题在于,它是在表上显示新行顺序之前调用的。我需要知道表何时更新,因为这个原因:我必须从Excel文件中订购一个JTable。因为我找不到一种方法来对所有的行进行排序,除了单元格标题的行(在excel中),所以我想我可以等到JTable被排序后,再找到一种方法t