Ich habe einen Baum, der mit TreeItems gefüllt ist, die ein Bild (eine Zeile mit einem Thumbnail) haben können. Ich ändere die Zeilenhöhe mit MeasureItem Listener, und alles ist gut.Zeilenhöhe in SWT ändern Tabelle/Struktur
Aber jetzt möchte ich diese Änderung dynamisch machen. Ich überprüfe, ob eine Zeile ein Bild haben sollte, und wenn eine Zeile in den aktuell aufgelisteten Zeilen ein Bild hat, das angezeigt werden soll, setze ich die Zeilenhöhe auf 180px, und alle Zeilen haben diese Höhe. Wenn keine Zeile mit einem Bild vorhanden ist, sollte die Zeilenhöhe 25 Pixel betragen.
Das Problem ist, wenn zu jeder Zeit die Zeilenhöhe auf 180px eingestellt ist, kann ich nicht zurück zu 25px ändern. Mein Code sieht wie folgt aus (vereinfacht):
//this check is run on each page of paginated results fetched from DB
rowHeight=25;
for(Result r : results){
if(r.hasImage()){
rowHeight=180;
break;
}
}
// resize the row height using a MeasureItem listener
tree.addListener(SWT.MeasureItem, new Listener() {
public void handleEvent(Event event) {
event.height = rowHeight;
}
});
//added 'event.height=rowHeight' here just to check if it will draw as I want
tree.addListener(SWT.EraseItem, new Listener() {
public void handleEvent(Event event) {
if(event.index!=ColumnType.SCREENSHOT.toIndexNum()){
event.detail &= ~SWT.FOREGROUND;
}
event.height=rowHeight;
}
});
Die rowHeight Variable gesetzt ist, wie es sollte, und auch die ‚event.height‘ im MeasureListener auf den gleichen Wert eingestellt. Trotzdem möchte ich die Höhe nicht reduzieren. Auf jeder Ergebnisseite lösche ich die Artikel mit tree.removeAll()
. Vielleicht sollte ich die Tabelle/den Baum entsorgen und neu erstellen (was ich nicht tun möchte)?
Also, irgendeine Idee, wie es geht?
P. S. Nicht zu verwechseln, brauche ich nicht verschiedene Höhen in den Zeilen, ich weiß, dass es unter Windows/Mac nicht möglich ist. Ich brauche nur einen Weg, um die Höhe zurückzusetzen.
Danke den Fehler für den Hinweis. Ich beendete das Neuzeichnen der gesamten Tabelle für jede Seite der Ergebnisse als Umgehung. – ekstrakt