2009-03-11 7 views
2

Je vous écris un plugin Eclipse qui a un contrôle de vol stationnaire qui se compose de deux commandes, l'une sur l'autre:Comment déterminer la taille préférée d'un arborescence JFace TreeViewer ou SWT?

Une visionneuse HTML (BrowserInformationControl) pour lequel je peux facilement calculer l'indice de taille

A TreeViewer qui contient un arbre.

J'ai configuré mon arborescence avec du contenu réel. Cependant, je ne peux pas trouver un moyen de comprendre la taille de l'arbre ou l'indice de taille pour une fois rendu.

+0

Juste ajouté des liens et des alternatives pour vous de vérifier. Pour être sûr, pourriez-vous compléter votre question avec la version exacte d'Eclipse que vous utilisez? Et la cible prévue (en terme de version Eclipse)? – VonC

+0

Il sera déterminé par la mise en page que le widget est géré par – andyczerwonka

Répondre

4

Selon l'API de org.eclipse.swt.widgets.Tree, cela devrait se faire avec:

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

La taille préférée d'un contrôle est la taille qu'il serait mieux affiché à. Les arguments width width et hint height permettent à l'appelant de poser des questions de contrôle telles que "Compte tenu d'une largeur particulière, quelle doit être la taille du contrôle pour afficher tout le contenu?"
Pour indiquer que l'appelant ne souhaite pas limiter une dimension particulière, la constante SWT.DEFAULT est transmise pour l'indicateur. Si le drapeau modifié est vrai, il indique que le contenu du récepteur a changé, par conséquent toutes les caches qu'un gestionnaire de disposition contenant le contrôle a pu conserver doivent être vidées. Lorsque le contrôle est redimensionné, le drapeau modifié sera faux, ainsi les caches du gestionnaire de disposition peuvent être conservés.


Notez que sur Windows, le comportement de computeSize() était défectueux: voir cette message et ce bug: fixe pour eclipse 3.4M1 et en avant. Exemple d'utilisation de computeSize() dans this message. L'utilisation de getBound() peut être une autre interesting alternative.

+0

C'est ce que j'ai utilisé ... Malheureusement, il ne semble pas impressionner Eclipse, qui ne cesse de revenir trop petit point ... – Uri

+0

Hi VonC, merci pour l'aide avec cela. Il s'avère que le problème se produit uniquement sur la version Mac. Quand je le lance dans Windows, mon code fonctionne comme un charme. Je vais vérifier avec l'autre distribution de Mac, car ils ont deux différents systèmes d'interface utilisateur qu'ils utilisent. – Uri

+0

@Uri: c'est bon à savoir. Je vais vérifier s'il y a un bug d'éclipse actuel enregistré pour cela. – VonC

Questions connexes