Create a table, add columns and the following listener to each column:
private Listener TableSortListener(final Table table) {
return new Listener() {
public void handleEvent(Event e) {
TableItem[] items = table.getItems();
Collator collator = Collator.getInstance(Locale.getDefault());
TableColumn column = (TableColumn)e.widget;
int index = 0;
// Get selected column
for(int i=0;i<table.getColumnCount();i++)
if(column == table.getColumn(i)) index=i;
// Set sort direction
int cmp =-1;
if(table.getSortDirection() == SWT.UP) cmp = 1;
for (int i = 1; i < items.length; i++) {
String value1 = items[i].getText(index);
for (int j = 0; j < i; j++){
String value2 = items[j].getText(index);
if (collator.compare(value1, value2) * cmp < 0) {
// Cache Strings
String[] values = new String[table.getColumnCount()] ;
for(int c=0;c<table.getColumnCount();c++) values[c] = items[i].getText(c);
// Cache Data & Images
String data = (String) items[i].getData();
org.eclipse.swt.graphics.Image image = items[i].getImage();
// Redraw
items[i].dispose();
TableItem item = new TableItem(table, SWT.NONE, j);
item.setText(values);
item.setData(data);
item.setImage(image);
items = table.getItems();
break;
}
}
}
table.setSortColumn(column);
table.setSortDirection((table.getSortDirection() == SWT.UP)? SWT.DOWN : SWT.UP);
}
};
}
No comments:
Post a Comment