2009-03-11 5 views
2

Ich bin ein Eclipse-Plugin zu schreiben, die eine Hover-Steuerung hat, die aus zwei Kontrollen besteht, eine auf der anderen:Wie kann man die bevorzugte Größe eines JFace TreeViewer oder SWT Tree ermitteln?

Ein HTML-Viewer (BrowserInformationControl), für die ich leicht die Größe Hinweis

A TreeViewer berechnen kann das enthält einen Baum.

Ich habe meinen Baum mit tatsächlichen Inhalten eingerichtet. Allerdings kann ich keinen Weg finden, um die Größe des Baumes oder den Größenhinweis dafür einmal herauszufinden.

+0

Nur hinzugefügt Links und Alternative für Sie zu überprüfen. Nur um sicher zu sein, könnten Sie Ihre Frage mit der genauen Version von Eclipse, die Sie verwenden, ausfüllen? Und das beabsichtigte Ziel (in Bezug auf die Eclipse-Version)? – VonC

+0

Es wird durch das Layout bestimmt werden, dass das Widget von – andyczerwonka

Antwort

4

Nach der API von org.eclipse.swt.widgets.Tree, soll dies gemacht werden:

public Point computeSize(int wHint, 
        int hHint, 
        boolean changed) 

Die bevorzugte Größe einer Steuer ist die Größe, dass es am besten bei angezeigt werden würde.

Mit den Argumenten width hint und height kann der Aufrufer eine Kontrollfrage stellen wie zB "Bei einer bestimmten Breite, wie hoch muss das Steuerelement sein, um den gesamten Inhalt anzuzeigen?"
Um anzuzeigen, dass der Aufrufer eine bestimmte Dimension nicht einschränken möchte, wird die Konstante SWT.DEFAULT für den Hinweis übergeben.

Wenn das geänderte Flag wahr ist, zeigt dies an, dass sich der Inhalt des Empfängers geändert hat. Daher müssen alle Caches, die ein Layout-Manager, der das Steuerelement enthält, behalten haben. Wenn die Größe des Steuerelements geändert wird, ist das geänderte Flag falsch, sodass Layoutmanager-Caches beibehalten werden können.


Beachten Sie, dass unter Windows, das Verhalten von computeSize() fehlerhaft war: siehe dieses message und diese bug: für Eclipse 3.4M1 fixiert und nach vorn.

Beispiel für die Verwendung von computeSize() in this message.

Die Verwendung von getBound() könnte eine andere sein interesting alternative.

+0

verwaltet wird Das ist, was ich verwendet habe ... Leider scheint es nicht zu beeindrucken Eclipse, die immer wieder zu einem kleinen Punkt ... – Uri

+0

Hallo VonC, Danke für die Hilfe dabei. Es stellt sich heraus, dass das Problem nur bei der Mac-Version auftritt. Wenn ich es in Windows starte, funktioniert mein Code wie ein Zauber. Ich werde mit der anderen Mac-Distribution nachsehen, da sie zwei verschiedene UI-Systeme verwenden. – Uri

+0

@Uri: Gut zu wissen. Ich werde prüfen, ob ein aktueller Eclipse-Bug dafür registriert ist. – VonC

Verwandte Themen