SWT 에서 Table Sort 정렬 하기!

zerolism ㅣ 2012. 5. 15. 01:51

SMALL

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);

}

LIST