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 :

Hook du bouton Apply sur une PreferencePage


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2010
    Messages : 6
    Par défaut Hook du bouton Apply sur une PreferencePage
    Bonjour à toutes et à tous,

    Je cherche à mettre un table dans une PreferencePage, or ça ne semble pas faisable de prime abord.
    Je ne sais pas si c'est la bonne façon de procéder, mais voila ce que j'ai fait :

    J'ai défini mon tableau comme suit :

    PreferenceConstants.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class PreferenceConstants {    
        public static final String S_HOSTSLIST = "SerializedStringHosstList";
    }
    PreferenceInitializer.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class PreferenceInitializer extends AbstractPreferenceInitializer {
        /*
         * (non-Javadoc)
         * 
         * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
         */
        public void initializeDefaultPreferences() {
            IPreferenceStore store = Activator.getDefault().getPreferenceStore();
            store.setDefault(PreferenceConstants.S_HOSTSLIST ,"");
        }
    }
    PreferencePage.java
    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
    public class PreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
     
        private Table table;
        private IPreferenceStore store;
     
        public PreferencePage() {
            super(GRID);
            setPreferenceStore(Activator.getDefault().getPreferenceStore());
            setDescription("Configuration de l'application Gaspard client");
        }
     
        public void createFieldEditors() {
            [...]
            Group groupe = new Group(this.getFieldEditorParent(), SWT.SHADOW_NONE);
            groupe.setText("Liste des Hôtes");
            GridLayout gl = new GridLayout(3,false);
            GridData gdgroupe =  new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH);
            gdgroupe.horizontalSpan = 2;
            groupe.setLayoutData(gdgroupe);
            groupe.setLayout(gl);
            Label lAjoutHost = new Label(groupe, SWT.NONE);
            lAjoutHost .setText("Hôte (Ex.: user:mot_de_passe@adresse:port) :");
            final Text tAjoutHost  = new Text(groupe, SWT.SINGLE | SWT.BORDER | SWT.BORDER_SOLID);
            GridData gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL);
            tAjoutHost .setLayoutData(gd);
            Button bAjoutHost = new Button(groupe, SWT.PUSH);
            bAjoutHost.setText(" + ");
            bAjoutHost.addMouseListener(new MouseListener() {
     
                @Override
                public void mouseUp(MouseEvent e) {        
                }
     
                @Override
                public void mouseDown(MouseEvent e) {            
                    String saisie = tAjoutHost.getText();
                    if(null != saisie && !saisie.isEmpty() && saisie.trim().length() > 0 && saisie.matches("([a-z0-9]|\\W)*[:]([a-z0-9]|\\W)*[@]([a-z0-9]|\\W)*[:]([a-z0-9]|\\W)*")){
                        TableItem tempItem = new TableItem(table, SWT.LEFT);
                        String[] datas = saisie.split("@");
                        String[] hostDatas = datas[1].split(":");
                        String[] userDatas = datas[0].split(":");
                        tempItem.setText(new String[]{hostDatas[0],hostDatas[1],userDatas[0],userDatas[1]});
                        table.update();
                    }
                }
     
                @Override
                public void mouseDoubleClick(MouseEvent e) {
                }
            });
     
            table = new Table(groupe, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION);
            GridData gridData = new GridData(GridData.FILL_BOTH);
            gridData.grabExcessVerticalSpace = true;
            gridData.horizontalSpan = 3;
            table.setLayoutData(gridData);
            table.setLinesVisible(true);
            table.setHeaderVisible(true);
     
            TableColumn columnHost = new TableColumn(table, SWT.LEFT);
            columnHost.setText("Hôte (IP/Nom Netbios)");
            columnHost.setResizable(true);
            columnHost.setMoveable(false);
            columnHost.pack();
     
            TableColumn columnPort = new TableColumn(table, SWT.LEFT);
            columnPort.setText("Port");
            columnPort.setResizable(true);
            columnPort.setMoveable(false);
            columnPort.pack();
     
            TableColumn columnUser = new TableColumn(table, SWT.LEFT);
            columnUser.setText("Identifiant");
            columnUser.setResizable(true);
            columnUser.setMoveable(false);
            columnUser.pack();
     
            TableColumn columnPWD = new TableColumn(table, SWT.LEFT);
            columnPWD.setText("Mot de passe");
            columnPWD.setResizable(true);
            columnPWD.setMoveable(false);
            columnPWD.pack();
     
            store = (IPreferenceStore) PlatformUI.getPreferenceStore();
            String hostsListe = store.getString(PreferenceConstants.S_HOSTSLIST);
     
            System.out.println("from Hostsslist :"+hostsListe);
     
            if(null != hostsListe&& hostsListe.length() > 0){
     
                String[] hosts = hostsListe.split(";");
     
                for(int index = 0; index < hosts .length; index++){
                    String host = hosts [index];
                    System.out.println(host );
                    if(host .matches("([a-z0-9]|\\W)*[,]([a-z0-9]|\\W)*[,]([a-z0-9]|\\W)*[,]([a-z0-9]|\\W)*")){
                        TableItem tempItem = new TableItem(table, SWT.LEFT);
                        String[] datas = host.split(",");
                        tempItem.setText(new String[]{datas[0],datas[1],datas[2],datas[3]});
                        table.update();
                    }
                }
            }
     
            this.getFieldEditorParent().getShell().addDisposeListener(new DisposeListener() {
     
                @Override
                public void widgetDisposed(DisposeEvent e) {
                    TableItem[] items = table.getItems();
                    String finalLigne = "";
                    for(int index = 0; index < items.length; index++){
                        String tempLignetemp = "";
                        for(int indexbis = 0; indexbis < table.getColumnCount(); indexbis++){
                            if(tempLignetemp.length() > 0){
                                tempLignetemp += ",";
                            }
                            tempLignetemp += items[index].getText(indexbis);
                        }
                        if(finalLigne.length() > 0){
                            finalLigne += ";";
                        }
                        finalLigne += tempLignetemp;
                    }
                    System.out.println("ligne final: "+finalLigne);
                    store = getPreferenceStore();
                    if(null != store){
                        store = (IPreferenceStore) PlatformUI.getPreferenceStore();
                        store.setValue(PreferenceConstants.S_HOSTSLIST, finalLigne);
                    }
                }
            });
    J'ai fini par mettre le code custom pour l'enregistrement de mon tableau dans une String sur l’événement dispose de la page mais ça ne me convient pas car du coup ça ne gère pas l'annulation ou l'Apply.

    Du coup je me demandais si la méthode que j'avais choisi pouvait fonctionné (des fois qu'il existe un truc tout fait que je n'aurais pas vu), et ensuite si c'est ça, je me demandais comment hooker les boutons Apply et Cancel.

    J'ai bien essayé avec
    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
    Button bApply = this.getApplyButton();
    bApply.addMouseListener(new MouseListener() {
     
        @Override
        public void mouseUp(MouseEvent e) {
            // TODO Auto-generated method stub
        }
     
        @Override
        public void mouseDown(MouseEvent e) {
            // Mon blabla du onDispose                
        }
     
        @Override
        public void mouseDoubleClick(MouseEvent e) {
            // TODO Auto-generated method stub
        }
    });
    Mais ça me retourne un NullPointerException.
    Du coup je ne vois plus quoi faire d'autre. Et je ne trouve pas que le onDispose soit ce qu'il y a de mieux.

    Qu'en pensez vous ?

    Merci d'avance pour vos réponses.

  2. #2
    Membre Expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Par défaut
    Salut,

    Tu n'as pas du tout besoin de hook pour le bouton Apply (ou defaults, ou Cancel d'ailleurs). Tu utilises une IWorkbenchPreferencePage qui hérite de l'interface IPreferencePage qui définit une méthode performOk(). De plus, FieldEditorPreferencePage hérite de PreferencePage et PreferencePage définit une méthode protected performApply() (qui ne fait qu'appeler le performOk()).
    Donc, ce qu'il te reste à faire, c'est de surcharger les méthodes performOk() et performCancel() (tu peux aussi surcharger performDefaults() au passage).

    Voilà, à+
    Gueritarish

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2010
    Messages : 6
    Par défaut
    Désolé du retard pour la réponse, je rentre juste de congé là. Je viens de faire comme tu me l'a conseiller et sa fonctionne effectivement très bien.

    Merci beaucoup.

    Citation Envoyé par Gueritarish Voir le message
    Salut,

    Tu n'as pas du tout besoin de hook pour le bouton Apply (ou defaults, ou Cancel d'ailleurs). Tu utilises une IWorkbenchPreferencePage qui hérite de l'interface IPreferencePage qui définit une méthode performOk(). De plus, FieldEditorPreferencePage hérite de PreferencePage et PreferencePage définit une méthode protected performApply() (qui ne fait qu'appeler le performOk()).
    Donc, ce qu'il te reste à faire, c'est de surcharger les méthodes performOk() et performCancel() (tu peux aussi surcharger performDefaults() au passage).

    Voilà, à+
    Gueritarish

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment lancer une appli sur une machine distante
    Par J.Michel dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 13/09/2007, 13h00
  2. programmer le bouton refresh sur une jtable
    Par henpower dans le forum Composants
    Réponses: 5
    Dernier message: 07/09/2007, 14h37
  3. Placer un bouton statique sur une feuille
    Par redabadache3 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/09/2007, 19h27
  4. bouton "retour" sur une autre anim
    Par ediziz dans le forum Flash
    Réponses: 1
    Dernier message: 16/02/2007, 15h16
  5. [VBA E] bouton dynamique sur une feuille
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 24/06/2006, 18h05

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