2010-11-30 27 views
0

J'ai un SplitLayoutPanel. Dans la cellule Nord, j'ai un ScrollPanel avec un arbre dessus. Je souhaite que la hauteur de ScrollPanel soit la même que celle de la cellule nord, donc lorsque l'arborescence se développe, un défilement apparaît. La taille de ce ScrollPanel doit être modifiée lorsque la cellule nord est redimensionnée. J'ai essayé avec RequireResizes mais parent ne pas envoyer la taille informations ... Une approche idéale devrait être que les widgets ProvidesSize appeler la méthode onResize avec la taille disponible pour les enfants widget RequiresSizeHauteur de l'enfant dans SplitLayoutPanel

Je suis très confus. Comment configurer SplitLayoutPanel pour que les enfants de la cellule soient redimensionnés?

Merci

Répondre

0

Créer une classe qui étend Composite et mettre en œuvre RequiresResize; comme suit:

public class MyScrollPanel extends Composite implements RequiresResize { 
private ScrollPanel scrollPanel; 

public MyScrollPanel() { 
    scrollPanel = new ScrollPanel(); 
    initWidget(scrollPanel); 
} 

public void onResize() { 
    // do something to your scrollpanel 
} 

} 

Ajoutez ensuite MyScrollPanel à la cellule nord de votre SplitLayoutPanel.

EDIT
Cependant. Il s'avère que ScrollPanel a déjà le comportement souhaité par défaut. Un ScrollPanel ajouté à une cellule SplitLayoutPanel remplira automatiquement la taille de la cellule, même lors du redimensionnement. Et tout widget enfant ScrollPanel plus grand que l'espace disponible provoquera l'apparition d'une barre de défilement.

Mais assurez-vous que vous ajoutez le SplitLayoutPanel aux RootLayoutPanel en faisant RootLayoutPanel.get().add(splitLayoutPanel);

+0

'' Composite' + RequiresResize' = 'ResizeComposite'. Et tous les panneaux entre 'MyScrollPanel' et' SplitLayouPanel' doivent être des panneaux Layout, sinon le redimensionnement n'est pas appelé dans le panneau 'MyScrollPanel'. –

+0

Selon les docs, ResizeComposite délègue automatiquement le onResize au widget enveloppé qui doit implémenter lui-même RequiresResize, de sorte que cela ne fonctionnera pas avec un ScrollPanel. Comme pour l'autre remarque, tous les widgets entre SplitLayoutPanel et MyScrollPanel ne doivent pas être des panneaux Layout, mais doivent implémenter ProvidesResize, ou MyScrollPanel.onResize() ne sera pas appelé. – dagge

+0

Merci pour votre réponse mais c'est exactement ce que j'ai fait mais je ne sais pas quoi mettre sur la méthode onResize. Comment définir la hauteur de mon ScrollPanel est égal à la hauteur de la cellule nord? C'est vraiment difficile de vérifier le parent dans un widget enfant parce que vous ne pouvez pas réutiliser votre widget enfant dans un autre parent ... –