如何解决JTable在对ASC或DESC进行排序时始终保持行组
我有一个 JTable 用来显示一些数据,数据基本上由 (Key,Value) 对组成。
我启用了按键列对表格进行排序。
但是无论是升序还是降序,我都需要一组键始终位于顶部。
示例:
未排序
键 | 价值 |
---|---|
键 A | 值 A |
C 键 | 价值 C |
键 B | 价值 B |
键 1 | 值 1 |
关键 3 | 值 3 |
键 2 | 值 2 |
关键 4 | 值 4 |
已排序的 ASC
键 | 价值 |
---|---|
键 A | 值 A |
键 B | 价值 B |
C 键 | 价值 C |
键 1 | 值 1 |
键 2 | 值 2 |
关键 3 | 值 3 |
关键 4 | 值 4 |
已排序的 DESC
键 | 价值 |
---|---|
C 键 | 价值 C |
键 B | 价值 B |
键 A | 值 A |
关键 4 | 值 4 |
关键 3 | 值 3 |
键 2 | 值 2 |
键 1 | 值 1 |
我创建了一个带有比较器的行排序器,并且能够获得 Sorted ASC,
final tablerowsorter<CTableModel> sorter = new tablerowsorter<CTableModel>((CTableModel) this.getModel());
sorter.setComparator(0,new CJTableComparator());
sorter.setSortable(1,false);
但 defaultrowsorter 通过将行号乘以 -1 来对 desc 进行排序。
private int compare(int model1,int model2) {
...
if (sortOrder == SortOrder.DESCENDING) {
result *= -1;
}
看到方法是私有的,我无法覆盖它。
有人对我如何处理这个问题有任何想法吗?
class CJTableComparator implements Comparator {
@Override
public int compare(Object o1,Object o2) {
CTableModel model = ((CTableModel)CJTable.this.getModel());
String so1 = o1.toString();
String so2 = o2.toString();
boolean isHeader1 = model.isHeader(so1);
boolean isHeader2 = model.isHeader(so2);
if(isHeader1 == isHeader2){
}else if(isHeader1){
so1 = "0"+so1;
so2 = "9"+so2;
}else if(isHeader2){
so1 = "9"+so1;
so2 = "0"+so2;
}
return so1.toString().comparetoIgnoreCase(so2.toString());
}
}
表格模型
public class CTableModel extends DefaultTableModel {
private final HashMap<String,CTableModelRow> rowsbyId = new HashMap<String,CTableModelRow>();
private final HashMap<String,CTableModelRow> rowsHeaders = new HashMap<String,CTableModelRow>();
static Object[][] empty = {{}};
private static final String[] DEFALT_COLUMNS = {"TAG","VALUE","PREV"};
public CTableModel (){
super(empty,DEFALT_COLUMNS);
this.setRowCount(0);
}
public CTableModelRow getRowByNumber(int number){
return rowsbyNumber.get(number);
}
public boolean isHeader(String key){
return rowsHeaders.containsKey(key);
}
}
结束。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。