La première page est créée mais rien ne s'affiche je ne peux donc pas la compléter pour passer à la suite.
Version imprimable
La première page est créée mais rien ne s'affiche je ne peux donc pas la compléter pour passer à la suite.
mais avec le système des couleurs, quel composite tu vois et lesquels tu vois pas
si j'ai bien compris tu vois container mais pas viewcomposite c'est ça ?
en déboguant ,tu passes bien dans ta méthode createControl de ta page ? et tu as bien ton composant comp qui se créé (tu passes bien par comp = new Composite(parent, SWT.NONE) ?
tu as mis une couleur bien voyante sur comp et tu ne le vois toujours pas ?
si non, essaye de jouer avec la taille de ta fenêtre à la souris, cela va provoquer un redraw, un relayout et autre. si tes composants s'affichent à partir de ce moment, y'a vraiment un schmilblick avec le layout
soit le layout n'est pas bien recalculé (donc le layout() qu'on appelle dans showStartingPage() n'a pas d'effet : il faut donc relayouter un composant au dessus
soit c'est tout simplement les changement de taille de la vue qui ne sont pas pris en compte : dans ce cas, il faut utiliser un ControlListener et relayouter sur le controlResized
Alors je vois veiwComposite qui prend toute la fenêtre et container qui prend une petite partie. Par contre après je ne vois pas comp. Sauf quand j'appelle createControl avec viewcomposite et non container.
Edit : Par contre c'est bizarre je ne vois pas les éléments présents dans comp (ni comp d'ailleurs car sa couleur ne s'affiche pas). Mais quand je modifie certains éléments présent dans comp (comme par exemple ajouter ou enlever des colonnes du GridLayout) et bhe le container grossis ou rapetit.
On devrait avoir ça :
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
avec en vert viewcomposite
en rouge container
en bleu comp
et tu obtiens en gros ça :
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
█████████████████████████████████████
c'est donc les layout de viewcomposite et de container qui ne vont pas
tu as bien ça dans createControl de ta vue :
Code:
1
2
3
4
5
6 viewcomposite = new Composite (parent, SWT.NONE); viewcomposite.setLayout(new GridLayout()); container = new Composite( viewcomposite, SWT.NONE ); layout = new StackLayout(); container.setLayout(layout);
aucun viewcomposite.setLayoutData(xxxx)
si c'est le cas, lorsqu'on change topControl de layout (dans showPage), le layout de viewcomposite ne se refait pas
juste après on a l'appel qui fait le relayout, au début on avait :
je t'ai fait essayé getShell().layout(true,true) à la place...tu as bien essayé ça ? et ça ne marche toujours pas ?Code:container.layout();
Voilà mon createControl de ma vue :
Sinon oui tes dessins représentent bien la chose. J'ai bien le second, sauf que le rectangle rouge prend autant de place que le premier dessin, comme si des choses étaient dedans mais sans apparaître.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 public void createPartControl(Composite parent) { viewcomposite = new Composite (parent, SWT.NONE); viewcomposite.setBackground(viewcomposite.getDisplay().getSystemColor(SWT.COLOR_RED)); viewcomposite.setLayout(new GridLayout()); container = new Composite(viewcomposite, SWT.NONE); container.setBackground(container.getDisplay().getSystemColor(SWT.COLOR_BLUE)); layout = new StackLayout(); container.setLayout(layout); myWizard = new MyWizard(container){ @Override public IWizardContainer getContainer() { return Parametrages.this; } }; myWizard.addPages(); parent.addDisposeListener( new DisposeListener() { public void widgetDisposed(DisposeEvent e) { myWizard.dispose(); } } ); showStartingPage(); GridData buttonBarGD = new GridData(GridData.FILL_HORIZONTAL); buttonBarGD.grabExcessVerticalSpace = true; buttonBarGD.horizontalIndent = 640; createButtonBar(viewcomposite).setLayoutData(buttonBarGD); }
ah, comme tu disais que tu voyais un petit bout de container je croyais que c'était le layout de container qui allait pasCode:Sinon oui tes dessins représentent bien la chose. J'ai bien le second, sauf que le rectangle rouge prend autant de place que le premier dessin, comme si des choses étaient dedans mais sans apparaître.
donc c'est à l'intérieur de container que ça va pas
or l'intérieur de container est layouté par un stacklayout dont on conserve la référence en variable membre de la classe de vue
tu ne te sers pas de cette variable layout pour autre chose, tu le modifies pas ni rien ?Code:layout = new StackLayout();
le seul autre code qui manipule layout c'est la méthode showPage
avec
ça me rappelle un problème que j'ai eu par ailleursCode:layout.topControl = currentPage.getControl();
pour le résoudre j'ai dû écrire une classe comme ça :
essaye avec cette classe, en remplaçant le StackLayout de SWT par celui là lorsque tu fais :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 package /*xxxx*/; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Composite; /** * Version de StackLayout dont la taille est celle du composant top, et non pas la taille du plus grand composant * * * @author jdrigo * */ public class StackLayout extends org.eclipse.swt.custom.StackLayout { protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) { int maxWidth = 0; int maxHeight = 0; if ( topControl!=null ) { Point size = topControl.computeSize(wHint, hHint, flushCache); maxWidth = size.x; maxHeight = size.y; } int width = maxWidth + 2 * marginWidth; int height = maxHeight + 2 * marginHeight; if (wHint != SWT.DEFAULT) width = wHint; if (hHint != SWT.DEFAULT) height = hHint; // si un composant fait 0 alors il fait DEFAULT_x (soit 64) donc un composant peut faire 1 de haut mais pas 0 !!! if ( width==0 ) { width=1; } if ( height==0 ) { height=1; } return new Point(width, height); } }
Code:layout = new StackLayout();
En remplaçant avec ton stackLayout ça me créé un container tout petit (un point).
Sinon mon layout je ne le modifie nul part quoi.
donc c'est qu'il n'y a soit rien dans ta page (aucun composant), soit que le layout de ta page a un problèmeCitation:
En remplaçant avec ton stackLayout ça me créé un container tout petit (un point).
je vois pas trop ou est le problème
j'ai créé un petit poc en reprenant les bouts de code que tu as posté, et ça marche :
vérifie bien tout par rapport au TestLayout que je t'ai envoyé (déjà si ça marche chez toi en direct)
tu es sous quel os ?
sinon je crois que je vais soit repartir de ton code, soit refaire tout bien clean à partir de zéro ce week end pour en avoir le coeur net.
autre chose, rien à voir avec le layout, mais ne crée pas de resource SWT sans les disposer :
toutes tes polices que tu créés avec des
consomme des handles qui ne sont libérés que quand tu arrête ta machineCode:labelTitre.setFont(new Font(null,"Arial",14,0));
utilises plutôt une FontRegistry
Ton test fonctionne aussi chez moi.
Je travaille sous Win XP.
si mon poc marche aussi chez toi, il y a forcément une différence quelque part.
J'ai modifié mon showStartingPage ainsi que ShowPage. Et maintenant ça marche :)
Bon j'ai quelque soucis de mise en page que je vais devoir régler mais j'ai l'impression que ça fonctionne. Merci de ton aide :mrgreen:
Je vais mettre "résolu". Merci encore !
et c'était quoi la modif ?
Un truc tout bête. En fait dans showStartingPage je faisais appel ensuite à showPage. Sauf que dans showPage toute la méthode était du au fait que la page n'est pas la même que la page courante (vu que je l'utilise pour next et back). Ors pour le début c'est forcemment le cas.
tu avais initialisé currentPage à wizard.getStartingPage() avant d'appeler showPage ? effectivement, le code dans le test n'était pas appelé alors
Oui en effet j'avais initialisé currentPage à wizard.getStartingPage() avant d'appeller showPage(). :?