目前我有一个使用JTable
的{{1}},但是当我点击我希望它排序的标题时,它会以奇怪的顺序显示行
然而,当我选择某一行时,比如第5行,它会更改标记为5的行。任何理由说明为什么会发生这种情况以及如何解决它?
答案 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();
}
});