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