Je développe actuellement une application en GWT (+GXT).
Cette dernière affiche un TabPanel au milieu d'un BorderLayout.
Dans chaque item de mon TabPanel, j'affiche une page si cette dernière n'est pas déjà affichée (même titre).
Quand j'affiche ma page (item) dans un RootLayoutPanel, j'ai toutes les infos désirées.
Quand je l'affiche via mon TabPanel, rien ne s'affiche à l'intérieur de mon TabItem (tout est blanc).
Mon controleur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
41
42
43
44 public class MyControler implements Presenter, ValueChangeHandler<String> { private final EventBus eventBus; private SerietvGinInjector injector; private HasWidgets container; private MyView vuePrincipale; private MessageBox waitBox; public MyControler(MyGinInjector injector) { this.injector = injector; this.eventBus = injector.getEventBus(); } public void go(HasWidgets container) { this.container = container; vuePrincipale = new MyView(); this.container.add(vuePrincipale); if ((History.getToken() != null) && (History.getToken().equals(""))) { History.newItem(Constante.MenuAccueil); } else { // Déclenchement de l'état initial de l'historique History.fireCurrentHistoryState(); } } public void onValueChange(ValueChangeEvent<String> event) { String token = event.getValue(); if (token != null) { ... // Si le token correspond à l'affichage d'une fiche if (Constante.ConsultFiche.equals(token)) { PresenterGTX presenter = new FichePresenter(injector, new FicheView(injector)); presenter.go(vuePrincipale); } } }
ma vue principale
mon TabItem
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97 public class MyView extends LayoutContainer { private Viewport viewport; private TitreWidget north;; private MenuWidget west; private TabPanel center; public MyView() { super(); } protected void onRender(Element target, int index) { super.onRender(target, index); viewport = new Viewport(); viewport.setLayout(new BorderLayout()); viewport.setStyleAttribute("padding", "10px"); north = new TitreWidget(); west = new MenuWidget(); center = new TabPanel(); center.setMinTabWidth(115); center.setResizeTabs(true); center.setAnimScroll(true); center.setTabScroll(true); center.setCloseContextMenu(true); BorderLayoutData northData = new BorderLayoutData(LayoutRegion.NORTH, 50); northData.setCollapsible(true); northData.setFloatable(true); northData.setHideCollapseTool(true); northData.setSplit(true); northData.setMargins(new Margins(0, 0, 5, 0)); BorderLayoutData westData = new BorderLayoutData(LayoutRegion.WEST, 150); westData.setSplit(true); westData.setCollapsible(true); westData.setMargins(new Margins(0,5,0,0)); BorderLayoutData centerData = new BorderLayoutData(LayoutRegion.CENTER); centerData.setMargins(new Margins(0,5,0,0)); viewport.add(north, northData); viewport.add(west, westData); viewport.add(center, centerData); add(viewport); } public boolean add(Widget widget) { if (widget instanceof ListeTitreView) { addItem(widget, "Liste des titres"); } else { if (widget instanceof FicheView) { String titre = ((FicheView) widget).getTitre(); addItem(widget, "Fiche ".concat(titre)); } else { super.add(widget); } } return attachChildren; } private void addItem(Widget widget, String titre) { String itemListe = null; for(TabItem item : center.getItems()) { if (titre.equals(item.getText())) { itemListe = item.getId(); break; } } if (null != itemListe) { // L'item existe deja center.getItemByItemId(itemListe).removeAll(); center.getItemByItemId(itemListe).add(widget); center.setSelection(center.getItemByItemId(itemListe)); } else { // Creation de l'item MyTabItem tabItem = new MyTabItem(titre); tabItem.add(widget); center.add(tabItem); center.setSelection(center.getItem(center.getItemCount())); } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public class MyTabItem extends TabItem { public MyTabItem(String title) { super(title); setBorders(false); setScrollMode(Scroll.AUTO); setText(title); setLayout(new FitLayout()); setWidth("100%"); setClosable(true); } }
Mon presenter
ma view FichView
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public class FichePresenter implements PresenterGTX { private final Display display; private MyGinInjector injector; public interface Display { Widget asWidget(); } public FichePresenter(MyGinInjector injector, Display view) { this.injector = injector; this.display = view; } public void go(LayoutContainer container) { container.add(display.asWidget()); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 public class FicheView extends LayoutContainer implements FichePresenter.Display { /** Injecteur */ MyGinInjector injector; /** Bus d'évènements */ private EventBus eventBus; /** la fiche courante */ private Fiche fiche; public FicheView(MyGinInjector injector) { super(); this.injector = injector; this.eventBus = injector.getEventBus(); fiche = Contexte.getFiche(); } protected void onRender(Element parent, int index) { super.onRender(parent, index); setLayout(new AccordionLayout()); add(new SerieWidget(injector, fiche)); add(new ProductionWidget(injector, fiche)); add(new CastingWidget(injector, fiche)); } public String getTitre() { return serie.getTitre(); } public Widget asWidget() { return this; } }
Partager