IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SWT/JFace Java Discussion :

Appli RCP, Scroll d'une vue


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Par défaut Appli RCP, Scroll d'une vue
    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.

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 11
    Par défaut
    Une fois n'est pas coutume, j'ai trouvé une solution avant d'avoir de l'aide...
    Ceci dit c'est de la triche alors j'aimerais bien trouver une solution propre.

    J'ai créé un champ texte visible, sélectionnable, non éditable en haut à gauche de ma vue, d'une taille 0*0. Transparent à l'utilisateur donc.

    Je donne le focus à ce widget au démarrage et j'ai rajouté un MouseListener sur mon composite qui donne le focus à ce même champ texte quand je clique dessus.

    Le + : j'ai le scroll à l'ouverture et si je viens à perdre le focus (changement de vue par exemple), le fait de cliquer sur ma vue me rend le scroll.
    Le - : un champ texte totalement inutile, un mouseevent qui n'a rien à faire là.

    En bref c'est une solution que j'aime pas du tout mais fonctionnelle...

    Petite adaptation en live, j'ai modifier le listener sur le composite pour utiliser le mouse-enter plutôt que le mouse-clic.

    J'ai effectué la même manip sur mes trois vues qui sont donc automatiquement sélectionnées quand la souris arrive dessus (en réalité c'est donc le widget qui sert à rien qui est sélectionné) et ça me permet de les scroller directement sans avoir à cliquer.

Discussions similaires

  1. [RCP] Charger un plugin dans une appli RCP
    Par beatkyo dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 16/01/2007, 12h53
  2. Utiliser des objets SWING dans une vue RCP
    Par manuga72 dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 20/10/2006, 17h26
  3. [RCP][débutant] Comment passer un objet d'une vue à une autre
    Par jycronier dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 20/07/2006, 15h13
  4. [RCP] Comment créer une nouvelle vue
    Par jycronier dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 19/07/2006, 00h23
  5. [RCP] Remplir un TableViewer d'une Vue depuis une Action
    Par DarkHope dans le forum Eclipse Platform
    Réponses: 16
    Dernier message: 26/06/2006, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo