年齢ソート
|
TableRowSorter に Comparator を設定して,年齢・生年月日で正しくソートできるようにした。 |
plugin/PatientSearchImpl.java
private void initComponents() {
・
・
TableRowSorter sorter = new TableRowSorter(tableModel) {
// ASCENDING -> DESENDING -> 初期状態 と切り替える
@Override
public void toggleSortOrder(int column) {
if(column >= 0 && column < getModelWrapper().getColumnCount() && isSortable(column)) {
List keys = new ArrayList(getSortKeys());
if(!keys.isEmpty()) {
SortKey sortKey = keys.get(0);
if(sortKey.getColumn() == column && sortKey.getSortOrder() == SortOrder.DESCENDING) {
setSortKeys(null);
return;
}
}
}
super.toggleSortOrder(column);
}
};
// 生年月日コラムに comparator を設定「32.10 歳(S60-01-01)」というのをソートできるようにする
sorter.setComparator(AGE_COLUMN, new Comparator(){
@Override
public int compare(Object o1, Object o2) {
String birthday1;
String birthday2;
if (ageDisplay) {
birthday1 = ModelUtils.getMmlBirthdayFromAge((String)o1);
birthday2 = ModelUtils.getMmlBirthdayFromAge((String)o2);
return birthday2.compareTo(birthday1);
} else {
birthday1 = (String)o1;
birthday2 = (String)o2;
return birthday1.compareTo(birthday2);
}
}
});
table.setRowSorter(sorter);
util/ModelUtils.java
/**
* 年齢付きの生年月日「32.10 歳 (S50-01-01)」形式から mmlBirthday を返す
* @param birthdayWithAge
* @return
*/
public static String getMmlBirthdayFromAge(String birthdayWithAge) {
String[] s = birthdayWithAge.split("[()]");
return toSeireki(s[1]);
}











