2009-08-25 5 views
1

J'essaie de créer un panneau de défilement qui a des paramètres de taille relatifs. Mais la fonction ScrollPanel.setSize(String, String) est impossible de travailler avec si vous avez des valeurs int telles que celles retournées par Window.getHeight.GWT Relative Width

Lorsque j'essaie ScrollPanel.setSize("100%", "150px");, la hauteur du panneau de défilement ne change pas et utilise la valeur par défaut. Toute aide serait appréciée.

+0

pouvez-vous afficher l'extrait de code le plus simple qui reproduira le problème? vous avez plus de chances d'obtenir de l'aide si nous savons exactement ce que vous essayez de faire. –

+0

Voir cette question (et ma réponse): http://stackoverflow.com/questions/41110336/how-to-use-scrollpanel-with-relative-size – Adam

Répondre

0

Je ne sais pas s'il est possible de le faire à la hauteur, mais ce qui a fonctionné pour moi avec la largeur était d'abord définir une largeur arbitraire, puis récupère l'élément et place la propriété width.

ScrollPanel myScrollPanel = new ScrollPanel(); 
myScrollPanel.setSize("2112px", "150px"); // Arbitrary width. 
myScrollPanel.getElement().getStyle().setProperty("width", "100%"); // or "auto" 

espère que cela fonctionne pour vous (même si vous avez demandé cela il y a 5 ans, alors vous êtes probablement pas trop inquiet à ce sujet plus)!

0

Copie ma réponse d'ici: How to use ScrollPanel with relative size

=================================== D'abord, ScrollPanel est quelque chose qui n'agit pas comme un autre widget pour la raison que je ne fais pas. Je sais pourquoi. Impossible de définir la taille relative (50%), et si je lui donne du style, il est perdu quelque part et ne peut pas être trouvé à partir de la page.

Ma solution consiste à utiliser un ResizeLayoutPanel. Andrei a suggéré d'utiliser quelque chose ProvidesResize mais nécessite que la chaîne de redimensionnement fournir/requérir reste ininterrompue, ce qui peut être très délicat. J'ai trouvé ce ResizeLayoutPanel "ProvidesResize à son un enfant, mais ne nécessite pas Resize", ce qui est le candidat idéal pour le panneau racine de mon composite. Ensuite, je viens d'étendre le ScrollPanel pour se redimensionner dans la méthode "onResize" chaque fois qu'il est appelé par le parent ResizeLayoutPanel.

Toujours pas de réponse à ma première question: par ScrollPanel se comportent comme ça en premier lieu? J'ai essayé de trouver la réponse dans son code source mais je n'ai pas réussi (même si je n'ai pas passé assez de temps à étudier le code source).

public class My100PctScrollPanel extends ScrollPanel { 
    @Override 
    public void onResize() { 
     // Window.alert("on resize"); 
     this.setWidth(this.getParent().getOffsetWidth()+"px"); 
     this.setHeight(this.getParent().getOffsetHeight()+"px"); 
     super.onResize(); 
    } 
} 

........ 

compositeRoot = new ResizeLayoutPanel(); 

........ 
scrollPanel = new My100PctScrollPanel(); 
compositeRoot.clear(); 
compositeRoot.add(scrollPanel);