编程语言
首页 > 编程语言> > java-JXTable列排序在1.0和1.6之间更改

java-JXTable列排序在1.0和1.6之间更改

作者:互联网

自从我们更新到JDK1.6以来,我最近将应用程序中的SwingX库从1.0版本更新到1.6.2.我知道排序已更改为重新使用JDK 1.6中引入的某些Core JDK组件.

但是,在1.0版中,可以通过单击标题来对列进行排序,随后的单击将还原排序顺序,而Shift单击可删除排序并还原为原始顺序.在更新到版本1.6.2之后,将不再出现shift单击行为.

小样本

import org.jdesktop.swingx.JXTable;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;
import java.awt.EventQueue;

public class JXTableSortingTest {
  public static void main( String[] args ) {
    EventQueue.invokeLater( new Runnable() {
      public void run() {
        initUI();
      }
    } );
  }

  private static void initUI(){
    JFrame testFrame = new JFrame( "TestFrame" );
    JXTable table = new JXTable(  );
    DefaultTableModel model =
        new DefaultTableModel( new Object[][]{ new Object[]{"A"}, new Object[]{"B"}, new Object[]{"C"}, new Object[]{"D"}, new Object[]{"E"} }, new Object[]{"Click me"} );
    table.setModel( model );

    testFrame.getContentPane().add( new JScrollPane( table ) );

    testFrame.pack();
    testFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    testFrame.setVisible( true );
  }
}

在1.0版中运行此示例可以通过在标题上单击并单击来删除列排序,而在1.6.2版中,该列不再起作用.

我检查了文档,但没有遇到任何改变该行为的方法.因此,在开始添加此功能之前,我在这里询问了是否有人知道重新引入Shift-Click行为的简便方法

解决方法:

不支持它,至少不完全以与1.0中完全不同的方式.

您可以使用的最接近默认支持是在JTable上设置sortOrderCycle属性,然后重复单击将在被单击列的状态之间循环显示:

table.setSortOrderCycle(ASCENDING, DESCENDING, UNSORTED);

这与旧的行为不同,旧的行为删除了所有排序-如果需要,可以使用自定义mouseListener来重置排序键.

另外,您可能会考虑在SwingX问题跟踪器中提出功能请求,然后在SwingLabs论坛上开始讨论:我们决定放弃它的主要原因是与核心行为保持一致.而且没有人吠叫,它留在那儿:-)

标签:swingx,swing,jxtable,tablerowsorter,java
来源: https://codeday.me/bug/20191201/2082438.html