SWT Tabelle sortieren

SirWayne

Erfahrenes Mitglied
Hallo,

Ich möchte meine Spalte sortieren, über die Zellen die in der Spalte sind...
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)?

Code:
  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);
  }
 
Ich hatte mal ein ähnliches Problem, und das habe ich so gelöst:

ich habe mir ein eigenes TableModel für die Table geschrieben, und in diesem habe ich die sortByColumn methode überschrieben. Füge dir meinen alten Code hinzu, bei mir hat es so funktioniert:

Code:
 public void sortByColumn(final int clm) {
            Collections.sort(this.dataVector, new Comparator() {

                public int compare(Object o1, Object o2) {
                    Vector v1 = (Vector) o1;
                    Vector v2 = (Vector) o2;

                    if (clm == 0) {
                        try {
                            String date1str = (String) v1.get(clm);
                            String date2str = (String) v2.get(clm);

                            Date date1;
                            Date date2;

                            SimpleDateFormat sdf = new SimpleDateFormat("dd.M.yyyy", Locale.GERMAN);
                            date1 = sdf.parse(date1str);
                            date2 = sdf.parse(date2str);

                            int cmp = date1.compareTo(date2);
                            if (sortColumnDesc[clm]) {
                                cmp *= -1;
                            }
                            return cmp;

                        } catch (ParseException ex) {
                        }
                    }

                    } else {
                        String linie = (String) v1.get(clm);
                        String linie1 = (String) v2.get(clm);
                        int cmp = linie.compareTo(linie1);
                        if (sortColumnDesc[clm]) {
                            cmp *= -1;
                        }
                        return cmp;
                    }
                }
            });
            tModel.sortColumnDesc[clm] ^= true;
        }
    }

Wenn es aus irgendeinen Grund nicht funktionieren soll, melde dich und ich schicke dir meine komplette Klasse in der ich die Tabelle aufbaue, befühle, sortiere etc.!

Gruß,
Harry
 
Zurück