JTable排序整数值的问题

时间:2012-02-01 04:52:54

标签: java swing user-interface sorting jtable

目前我有一个使用JTable的{​​{1}},但是当我点击我希望它排序的标题时,它会以奇怪的顺序显示行

  • 1
  • 10
  • 11
  • ...
  • 2
  • 20
  • 21
  • ...
  • 3
  • 30

然而,当我选择某一行时,比如第5行,它会更改标记为5的行。任何理由说明为什么会发生这种情况以及如何解决它?

6 个答案:

答案 0 :(得分:5)

您可以通过明确设置其模型来设置JTable的列类型,如下例

中所示
setModel(new DefaultTableModel(new Object[0][], new String[] {
                "SELECT", "WHERE", "FIELD", "TYPE" }) {
            Class[] types = { Boolean.class, Boolean.class, String.class,
                    String.class };
            boolean[] canEdit = { true, false, false, false };

            @Override
            public Class getColumnClass(int columnIndex) {
                return this.types[columnIndex];
            }

            public boolean isCellEditable(int columnIndex) {
                return this.canEdit[columnIndex];
            }
        });

给你的列类这样(这里第一列和第二列是布尔值,其余是String。

 Class[] types = { Boolean.class, Boolean.class, String.class,String.class };

答案 1 :(得分:3)

您将行内容视为文本。您的排序顺序是字母顺序而不是数字顺序。如果你将内容视为数字,它应该自行解决。

答案 2 :(得分:3)

要扩展@aaamos的回答,请验证您的TableModel是否从Number.class返回getColumnClass()(或合适的子类)。有一个相关的例子here

答案 3 :(得分:0)

为了满足您的要求,您只需在对指定列进行排序时设置Comparator for RowSorter即可。代码有点像下面这样:

table.setAutoCreateRowSorter(true);
TableRowSorter<DefaultTableModel> rowSorter = (TableRowSorter<DefaultTableModel>)table.getRowSorter();
rowSorter.setComparator(5, new Comparator<String>() {

        @Override
        public int compare(String o1, String o2)
        {
            return Integer.parseInt(o1) - Integer.parseInt(o2);
        }

    });

答案 4 :(得分:0)

您必须将以下代码添加到不将列排序为整数的实际代码中。

构建JTable的实际代码是:

.hide()

解决方案:

DefaultTableModel modeloT = new DefaultTableModel(); 
// But Sorts the column of numbers in wrong way. 1,11,2,25,......

答案 5 :(得分:0)

我也在努力实现你想要做的事情,我努力去理解如何自己做。我实现“正确”排序的方式是这样的:

DefaultTableModel model = new DefaultTableModel(row, col){
    @Overrride
     public Class getColumnClass(int c) {
         return getValueAt(0, c).getClass();
     }
});