Jface 의 경우 Label Provider, SetSorter() 를 구현하여 쉽게 Sort 를 할 수 있는 정렬이 SWT 환경에서는 해당 Row 의 Component 를 찾아가 String Value 를 구하여 간단하게 String 만 서로 변경하는 예제 밖에 발견하지 못했다.
결국 혼자 이렇게 저렇게 해보다가 구현한 방식이 Table 에서 비교열의 value 를 2개 row 씩 비교하고 이를 SWT.UP, SWT.DOWN (오름차순, 내림차순) 조건에 따라 버블 정렬을 돌려 구현하는 방식을 채택하였다.
함수는 아래와 같다.
public void doSort(SelectionEvent e, TableColumn callNumColumn)
{
TableColumn sortColumn = table.getSortColumn();
TableColumn currentColumn = (TableColumn) e.widget;
int dir = table.getSortDirection();
if (sortColumn == currentColumn) {
dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
} else {
dir = SWT.UP;
}
TableItem[] items = table.getItems();
Collator collator = Collator.getInstance(Locale.getDefault());
TableColumn column = (TableColumn) e.widget;
int index = column == callNumColumn ? 0 : 1;
for (int i = items.length - 1; i > 0; i--) {
if (null == items[i].getData("0")) {
} else {
String value1 = ((Text) items[i].getData("0")).getText().toString();
for (int j = 0; j < i; j++) {
String value2 = ((Text) items[j].getData("0")).getText().toString();
if(dir == SWT.UP)
{
if (collator.compare(value1, value2) > 0) {
phoneDataChange(items, value1, value2, i, j);// tmp Object 를 만들어 치환해준다.
break;
}
}
else if(dir == SWT.DOWN)
{
if (collator.compare(value1, value2) < 0) {
phoneDataChange(items, value1, value2, i, j); // tmp Object 를 만들어 치환해준다.
break;
}
}
}
}
}
table.setSortDirection(dir);
table.setSortColumn(column);
}
'SWT/JFACE' 카테고리의 다른 글
SWT Table component row 삭제시 갱신 안될 때 (refresh) 시키기 (0) | 2012.05.17 |
---|---|
SWT, Widget 이 들어있는 Table 의 row 삭제하기 (0) | 2012.05.15 |
Eclipse ResourceBundle Plugin 으로 사용하기 (0) | 2012.05.04 |
SWT/Jface 다국어 (MultiLanguage) 지원 (0) | 2012.05.04 |
SWT/JFACE 개발환경 구축하기 (0) | 2012.05.03 |