Hallo zusammen,
Ich hab mir einen eigene TableSpalte gebastelt, die ich sortieren lassen möchte.
Ich möchte/kann kein ViewSorter benutzen weil ich dort in der compare methode die Objekte bekomme die ich im TableViewer int setInput reinschmeiße… Diese Objekte können bei jedem TableViewer anders sein. Ich wollte eine sort methode(Spalte) die für alle Tabellen gülitig ist, darum dachte ich ich geh über die TableItems und deren Inhalte und lass danach sortieren. Was auch wunderbar klappt, bis auf das anzeigen. Weiß jemand wie ich dieses Vorhaben umsetzen könnte oder wie ich die neuen Items anzeigen kann (ohne sie zu disposen weil es kein clone gibt)?
public class TableSortColumn
{
private TableColumn controlColumn;
private int columnNumber;
private String sortIdentifier;
public TableSortColumn(Table parent, int style, String sortIdentifier)
{
sortIdentifier = sortIdentifier;
sontrolColumn = new TableColumn(parent, style);
solumnNumber = parent.getColumnCount() - 1;
controlColumn.addListener(SWT.Selection, new SortLisener(parent));
}
private class SortLisener implements Listener
{
private final Table table;
public SortLisener(Table table)
{
this.table = table;
}
public void handleEvent(Event e)
{
sort(e, table);
}
}
private void sort(Event e, Table table)
{
final TableColumn sortColumn = table.getSortColumn();
final TableColumn currentColumn = (TableColumn) e.widget;
int dir = table.getSortDirection();
if (sortColumn == currentColumn)
{
dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
}
else
{
table.setSortColumn(currentColumn);
dir = SWT.UP;
}
final TableItem[] items = table.getItems();
Arrays.sort(items, new TableSorter(mSortIdentifier, dir, mColumnNumber));
table.setSortDirection(dir);
}
}
hier im tablesorter die entsprechende compare methode…
public int compare(Object o1, Object o2)
{
int returnValue = 0;
final TableItem item1 = (TableItem) o1;
final TableItem item2 = (TableItem) o2;
if (sortIdentifier.equals(STRING_SORT))
{
returnValue = sortString(item1, item2);
}
if (sortIdentifier.equals(LONG_SORT))
{
returnValue = sortLong(item1, item2);
}
if (sortIdentifier.equals(DOUBLE_SORT))
{
returnValue = sortDouble(item1, item2);
}
if (sortIdentifier.equals(DATE_SORT))
{
returnValue = sortDate(item1, item2);
}
if (dir == SWT.DOWN)
{
returnValue *= -1;
}
return returnValue;
}
private int sortString(final TableItem item1, final TableItem item2)
{
final String s1 = item1.getText(col);
final String s2 = item2.getText(col);
return s1.compareTo(s2);
}
Wie gesagt wenn es eine bessere Methode gibt wie man Zeilen sortieren lassen, bin ich gerne für jedenTip offen!!
Das Problem ist die Zeilen werden in der Arrays.sort methode richtig sortiert, aber nicht angezeigt.