Bonjour,

Une semaine. C'est le temps que j'ai passé à chercher une solution à mon "petit" souci.
J'ai avancé un peu tout de même depuis les premiers échecs jusqu'à maintenant mais j'avoue être bloqué à l'étape actuelle depuis trop longtemps, faut que ça bouge qu'il disait !

Pour faire simple je vais être concis, si vous avez des questions n'hésitez pas !

J'ai créé une appli RCP, une perspective, trois vues agencées comme je le veux, des boutons, des champs texte et tout et tout.
J'aimerais que chaque vue soit scrollable (ie : qu'à l'ouverture de l'appli je puisse utiliser la molette de ma souris pour faire défiler ma vue de haut en bas une fois cette vue sélectionnée, bien entendue).
A l'heure actuelle le scroll fonctionne mais je dois OBLIGATOIREMENT sélectionner un composant à l'intérieur de cette vue.

Ça commence je suppose à être légèrement flou pour qui me lit alors je donne le code de la vue en question et je complète ensuite :

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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
import org.eclipse.ui.part.ViewPart;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
 
public class Reste extends ViewPart {
    private Text txtUserFullName;
    private Text txtErreurs;
    private Table tblResults;
    private Button btnNouvelleSession;
    private Button btnListeEntities;
    private Button btnListeFields;
    private Button btnListeValues;
    private Button btnListeDatabases;
    private Combo cmbListeEntities;
    private Combo cmbListeFields;
    private Combo cmbListeValues;
    private Combo cmbListeDatabases;
    private Label lblErreurs;
 
 
    public Reste() {
    }
 
    @Override
    public void createPartControl(Composite parent) {
 
        ScrolledComposite scrolledCompositeForm = new ScrolledComposite(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
        scrolledCompositeForm.setExpandHorizontal(true);
        scrolledCompositeForm.setExpandVertical(true);
 
        Composite compositeForm = new Composite(scrolledCompositeForm, SWT.NONE);
 
//Connect to a repository
        btnNouvelleSession = new Button(compositeForm, SWT.NONE);
        btnNouvelleSession.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseDown(MouseEvent e) {
                //Create a session object
                btnNouvelleSession.setEnabled(false);
                //Fill the session object and connect
                txtUserFullName.setText("Welcome");
                txtUserFullName.setVisible(true);
                btnListeEntities.setVisible(true);
                btnListeDatabases.setVisible(true);
            }
        });
        btnNouvelleSession.setBounds(10, 10, 230, 23);
        btnNouvelleSession.setText("Nouvelle session");
 
        //************************************************************
        txtUserFullName = new Text(compositeForm, SWT.BORDER);
        txtUserFullName.setEditable(false);
        txtUserFullName.setVisible(false);
        txtUserFullName.setBounds(10, 39, 230, 23);
 
        //************************************************************
        btnListeEntities = new Button(compositeForm, SWT.NONE);
        btnListeEntities.setVisible(false);
        btnListeEntities.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseDown(MouseEvent e) {
                    Reset(btnListeFields);
                    Reset(cmbListeFields);
                    Reset(btnListeValues);
                    Reset(cmbListeValues);
                    cmbListeEntities.removeAll();
                    String[] ListeEntities = {"A","B","C"};
                    ListeEntities = TriTableauString(ListeEntities);
                    cmbListeEntities.setItems(ListeEntities);
                    cmbListeEntities.setVisible(true);
                    btnListeFields.setVisible(true);
            }
        });
        btnListeEntities.setBounds(250, 10, 230, 23);
        btnListeEntities.setText("Liste des tables");
 
        //************************************************************
        cmbListeEntities = new Combo(compositeForm, SWT.NONE);
        cmbListeEntities.setVisible(false);
        cmbListeEntities.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                if (cmbListeEntities.getSelectionIndex() != -1){
                    btnListeFields.setEnabled(true);
                }
            }
        });
        cmbListeEntities.addFocusListener(new FocusAdapter() {
            @Override
            public void focusGained(FocusEvent e) {
                cmbListeEntities.setForeground(SWTResourceManager.getColor(SWT.COLOR_BLACK));
            }
        });
        cmbListeEntities.setVisibleItemCount(15);
        cmbListeEntities.setToolTipText("S\u00E9lectionnez la table");
        cmbListeEntities.setBounds(250, 39, 230, 23);
 
        //************************************************************
        btnListeFields = new Button(compositeForm, SWT.NONE);
        btnListeFields.setVisible(false);
        btnListeFields.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseDown(MouseEvent e) {
                Reset(btnListeValues);
                Reset(cmbListeValues);
                cmbListeFields.removeAll();
                String[] Fields = {"D","E","F"};
                cmbListeFields.setItems(Fields);
                btnListeValues.setVisible(true);
                cmbListeFields.setVisible(true);
            }
        });
        btnListeFields.setText("Liste des champs");
        btnListeFields.setBounds(250, 68, 230, 23);
 
        //************************************************************
        cmbListeFields = new Combo(compositeForm, SWT.NONE);
        cmbListeFields.setVisible(false);
        cmbListeFields.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                if (cmbListeFields.getSelectionIndex() != -1){
                    btnListeValues.setEnabled(true);
                }
            }
        });
        cmbListeFields.setVisibleItemCount(15);
        cmbListeFields.setToolTipText("S\u00E9lectionnez le champ");
        cmbListeFields.setBounds(250, 97, 230, 23);
 
        //************************************************************
        btnListeValues = new Button(compositeForm, SWT.NONE);
        btnListeValues.setVisible(false);
        btnListeValues.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseDown(MouseEvent e) {
                cmbListeValues.removeAll();
                long cpt = 3;
                if (cpt !=0){
                    for (int i=0;i<cpt;i++){
                    }
                    cmbListeValues.setVisible(true);
                }else{
                    cmbListeEntities.setForeground(SWTResourceManager.getColor(SWT.COLOR_RED));
                }
            }
        });
        btnListeValues.setText("Liste des valeurs");
        btnListeValues.setBounds(250, 124, 230, 23);
 
        //************************************************************
        cmbListeValues = new Combo(compositeForm, SWT.NONE);
        cmbListeValues.setVisible(false);
        cmbListeValues.setVisibleItemCount(15);
        cmbListeValues.setToolTipText("Liste des valeurs de ce champ");
        cmbListeValues.setBounds(250, 153, 230, 23);
 
        //************************************************************
        btnListeDatabases = new Button(compositeForm, SWT.NONE);
        btnListeDatabases.setVisible(false);
        btnListeDatabases.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseDown(MouseEvent e) {
            }
        });
        btnListeDatabases.setText("Liste des bases de donn\u00E9es");
        btnListeDatabases.setBounds(10, 68, 230, 23);
 
        //************************************************************
        cmbListeDatabases = new Combo(compositeForm, SWT.NONE);
        cmbListeDatabases.setVisible(false);
        cmbListeDatabases.setVisibleItemCount(15);
        cmbListeDatabases.setBounds(10, 97, 230, 23);
 
        //************************************************************
        tblResults = new Table(compositeForm, SWT.BORDER | SWT.FULL_SELECTION);
        tblResults.setBounds(10, 180, 470, 281);
        tblResults.setHeaderVisible(true);
        tblResults.setLinesVisible(true);
 
        String[] titles = {"Champ", "Valeur"};
        for (int i=0; i<titles.length; i++) {
            TableColumn column = new TableColumn (tblResults, SWT.NONE);
            column.setText (titles [i]);
            column.setWidth(235);
        }
        int count = 78;
        for (int i=0; i<count; i++) {
            TableItem item = new TableItem (tblResults, SWT.NONE);
            item.setText (0, "x" + i);
            item.setText (1, "y");
        }
        for (int i=0; i<titles.length; i++) {
            tblResults.getColumn(i).pack();
        }
 
        //************************************************************
        lblErreurs = new Label(compositeForm, SWT.NONE);
        lblErreurs.setBounds(10, 467, 49, 13);
        lblErreurs.setText("Erreur(s) :");
 
        //************************************************************
        txtErreurs = new Text(compositeForm, SWT.BORDER);
        txtErreurs.setEditable(false);
        txtErreurs.setEnabled(false);
        txtErreurs.setForeground(SWTResourceManager.getColor(SWT.COLOR_RED));
        txtErreurs.setBounds(10, 486, 470, 69);    
 
        scrolledCompositeForm.setContent(compositeForm);
        scrolledCompositeForm.setMinSize(compositeForm.computeSize(SWT.DEFAULT, SWT.DEFAULT));
    }
 
    public void dispose(){
    }
 
    @Override
    public void setFocus() {
    }
 
    public String[] TriTableauString(String[] Tableau){
        int Taille = Tableau.length;
        String[] TableauFinal;
        TableauFinal= new String[Taille];
        int premiernonvide=0;
        int dernieralpha=0;
        int iteratorglobal;
        int iteratorunitaire;
 
        if (Taille < 2 ){
            //Le tableau n'a pas besoin d'être trié
        }else{
            //Construction du tableau final
            for (iteratorglobal=0; iteratorglobal<Taille; iteratorglobal++){
                //Placement de la valeur la plus haute dans le tableau final
                while (Tableau[premiernonvide] == ""){
                    premiernonvide++;
                }
                dernieralpha = premiernonvide;
                for (iteratorunitaire=0; iteratorunitaire<Taille; iteratorunitaire++){
                    if (Tableau[iteratorunitaire].compareToIgnoreCase(Tableau[dernieralpha]) > 0){
                        dernieralpha = iteratorunitaire;
                    }
                }
                TableauFinal[Taille-iteratorglobal-1] = Tableau[dernieralpha];
                Tableau[dernieralpha]="";
            }
        }
        return TableauFinal;
    }
 
    public void Reset(Button ButtonObject){
        ButtonObject.setVisible(false);
        ButtonObject.setEnabled(false);
    }
 
    public void Reset(Combo ComboObject){
        ComboObject.setVisible(false);
    }
}
Pour ceux qui testeraient, vous pourrez remarquer que la vue a bien les deux barres de scroll (une verticale et une horizontale), que le scroll s'effectue bien quand un des boutons est sélectionné mais si on ne sélectionne pas un des éléments du composite, bien que la vue soit toujours active, le scroll ne fonctionne pas.
J'ai testé en ajoutant le focus au démarrage sur un bouton, j'ai donc bien le scroll au lancement mais je le perds dès que je change de vue pour revenir à celle ci.


Pour moi c'est clair j'espère que pour vous aussi si c'est pas le cas j'expliciterai plus en fonction des questions.

Vincent

PS : j'ai retiré un paquet de code qui n'a rien à voir avec notre affaire et nécessitant des liaisons externes pour que vous puissiez regarder, du coup ça fait un peu "vuequisertàrien" là ! lol
PS2 : J'utilise Eclipse Indigo (3.7) avec le plugin Window Builder pour programmer ma vue en SWT.
PS3 : Si besoin je peux transmettre le projet.