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 :

Application RCP, modèle MVC avec SWT


Sujet :

SWT/JFace Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Points : 94
    Points
    94
    Par défaut Application RCP, modèle MVC avec SWT
    Bonjour à tous

    Je suis débutant et j'ai du mal à comprendre le fonctionnement du modèle MVC.

    Voici la hiérarchie de mes classes :

    src
    -- com.eclipse.rcp.app1
    ------ Activator
    ------ Application
    ------ ApplicationActionBarAdvisor
    ------ ApplicationWorkbenchAdvisor
    ------ ApplicationWorkbenchWindow
    ------ Perspective

    -- com.eclipse.rcp.app1.controller
    ------ DirectorySlectionListener

    -- com.eclipse.rcp.app1.view
    ------ Complements
    ------ Etapes
    ------ Parametrage

    Donc déjà, si j'ai bien compris suivant ma hiérarchie j'ai bien le modèle MVC non ?

    Enfin j'ai surtout un problème. J'ai une classe où je créai mon interface graphique :
    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
     
    package com.eclipse.rcp.app1.view;
     
    import com.eclipse.rcp.app1.controller.DirectorySelectionListener;
     
    public class Parametrage extends ViewPart {
     
    	public Parametrage() {
    		// TODO Auto-generated constructor stub
    	}
     
    	@Override
    	public void createPartControl(Composite parent) {
    		createEtape1(parent);
     
    	}
     
    	@Override
    	public void setFocus() {
    		// TODO Auto-generated method stub
     
    	}
     
    	public void createEtape1(Composite parent){
     
    		GridLayout lieuAffaire = new GridLayout(3,false);
    		parent.setLayout(lieuAffaire);
    		lieuAffaire.marginLeft = 300;
     
    		Label labelTitre = new Label(parent,SWT.NONE);
    		labelTitre.setText("Sélection du lieu de l'affaire et des matrices de test");
    		labelTitre.setFont(new Font(null,"Arial",18,0));
    		GridData titreGD = new GridData(GridData.FILL_HORIZONTAL);
    		titreGD.horizontalSpan = 3;
    		titreGD.heightHint = 70;
    		titreGD.horizontalIndent = -45;
    		titreGD.verticalIndent = 20;
    		labelTitre.setLayoutData(titreGD);
     
    		Label labelLieu = new Label(parent, SWT.NONE);
    		labelLieu.setText("Lieu de l'affaire : ");
    		labelLieu.setFont(new Font(null,"Arial",13,0));
    		Text textLieu = new Text(parent, SWT.BORDER);
    		textLieu.setText("Chemin de l'affaire");
    		textLieu.setFont(new Font(null,"Arial",13,0));
    		GridData affaireGD = new GridData(GridData.CENTER);
    		affaireGD.widthHint = 220;
    		textLieu.setLayoutData(affaireGD);
    		Button btnLieuAffaire = new Button(parent, SWT.NONE);
    		btnLieuAffaire.setText("...");
    		btnLieuAffaire.addSelectionListener(new DirectorySelectionListener(textLieu));
    Et une classe pour le traitement de mon bouton :


    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
    package com.eclipse.rcp.app1.controller;
     
    public class DirectorySelectionListener implements SelectionListener {
     
    	final IWorkbench workbench = PlatformUI.getWorkbench();
    	final Display display = workbench.getDisplay();
        Shell shell = new Shell (display);
     
    	private Text textLieu;
     
        public DirectorySelectionListener(Text textLieu){
        	this.textLieu = textLieu;
        }
    	@Override
    	public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent evt) {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void widgetSelected(org.eclipse.swt.events.SelectionEvent evt) {
    		// TODO Auto-generated method stub
    		DirectoryDialog leDialogue = new DirectoryDialog(shell, SWT.OPEN);
    		leDialogue.setText("Choix du répertoire");
    		try
    		{
    			textLieu.setText(leDialogue.open());
    		}
    		catch (IllegalArgumentException e) {}
     
    	}
    }
    Donc là j'ai bien séparé la vue de mon contrôleur non ?

    Le truc que je ne comprend pas c'est comment puis-je faire pour pouvoir modifier plusieurs éléments de mon interface graphique ?
    En fait lorsque je clique sur le bouton j'aimerai modifier plusieurs éléments de mon interface mais le problème c'est que dans le contrôleur je ne peux récupérer seulement le bouton.

    Je vous remercie pour votre aide.

    Cordialement,

    Leniouns

  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 : 40
    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
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Alors, plusieurs remarques:
    • Tout d'abord, sache que si tu n'utilises pas toutes les méthodes d'un Listener, il existe très généralement un Adapter qui te permet de ne surcharger que les méthodes qui ont un réel intérêt pour toi. Exemple: SelectionListener et SelectionAdapter.
    • Tu devrais coder en anglais. C'est une convention et c'est adopté par beaucoup de personnes. De plus, ça te servira dans l'industrie.
    • Ce que tu as fait n'est pas vraiment un modèle MVC (désolé de te l'annoncer). Déjà, tu n'as pas de modèle. Ensuite, ton controller est un listener (ce qui est clairement de la vue).

    Pour "simplifier" un peu le modèle MVC, ton controller connait ton modèle et ta vue. Toutes communications de la vue passe par le controller. Toutes modification du modèle se fait dans la partie modèle et est répercuté sur la vue par le controller.

    Voilà, à+
    Gueritarish

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Points : 94
    Points
    94
    Par défaut
    Oula donc oui je suis loin du compte.

    Mais lorsque tu dis que mon contrôleur est un listener (ce qui selon tes dires et de la vue). Je ne comprend pas trop car justement dans le listener je modifie ma vue.

    Pour moi en fait j'avais ma vue qui est l'interface graphique, le controleur qui modifie cette interface graphique à chaque évènement et le modèle représenté en fait l'aspect métier de l'appli. Mais je pense avoir faux...

  4. #4
    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 : 40
    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
    Points : 3 919
    Points
    3 919
    Par défaut
    Citation Envoyé par Leniouns Voir le message
    Mais lorsque tu dis que mon contrôleur est un listener (ce qui selon tes dires et de la vue). Je ne comprend pas trop car justement dans le listener je modifie ma vue.
    C'est pas parce que tu modifies ta vue dans une classe que cette classe est un contrôleur
    Il faut que ça soit bien implémenté.
    Un listener est appelé pour chaque évènement graphique. Par contre, le code qui est exécuté suite à cet évènement graphique, il faut que ça soit le contrôleur qui s'en occupe.
    Citation Envoyé par Leniouns Voir le message
    Pour moi en fait j'avais ma vue qui est l'interface graphique, le controleur qui modifie cette interface graphique à chaque évènement et le modèle représenté en fait l'aspect métier de l'appli.
    La théorie est bonne
    La mise en œuvre un peu moins. Ce qu'il te faut faire c'est appeler une méthode de ton contrôleur à chaque évènement. Pour ton exemple de sélection de dossier, ça serait: Ton contrôleur qui contient cette méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class MyControler {
        public void selectFolder() {
            // Affichage de la boite de dialogue de sélection de dossier.
            String selectedFolder = displayFolderSelectionDialog();
            myView.updateFolderText(selectedFolder);
        }
    }
    Ton listener qui ressemble à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class DirectorySelectionListener extends SelectionAdapter {
     
        private MyController myController;
     
        public DirectorySelectionListener(MyController aController) {
            myController = aController;
        }
     
        public void widgetSelected(SelectionEvent aEvent) {
            myController.selectFolder();
        }
    }
    Voilà, à+
    Gueritarish

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Points : 94
    Points
    94
    Par défaut
    D'accord j'y vois un peu plus clair.

    Cependant à quoi correspond ta méthode displayFolderSelectionDialog() et ton attribut myView ? Dans mon exemple myView correspondrait à quoi ?

    Je te remercie pour ton aide.

  6. #6
    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 : 40
    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
    Points : 3 919
    Points
    3 919
    Par défaut
    Certes, j'ai pas indiqué ça
    myView va correspondre à l'instance de ta vue Parametrage (? je crois). Du moins, elle correspond à une instance de la vue qui doit être mise à jour.
    Après, la méthode displayFolderSelectionDialog() correspond à la méthode que tu appelles pour afficher ta boite de dialogue. Le mieux étant de faire quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private String displayFolderSelectionDialog() {
        DirectoryDialog myDialog = new DirectoryDialog(shell, SWT.OPEN);
        myDialog.setText("Choix du répertoire");
        return myDialog.open();
    }
    Voilà, à+
    Gueritarish

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Points : 94
    Points
    94
    Par défaut
    D'accord

    Merci de ton aide, je vais plancher sur ça. Je reviendrai si j'ai des questions

    Merci encore

Discussions similaires

  1. Réponses: 16
    Dernier message: 20/05/2015, 13h36
  2. application RCP dependance avec projet java
    Par kespy13 dans le forum Eclipse Platform
    Réponses: 5
    Dernier message: 04/05/2009, 13h18
  3. Débugger une application MVC avec Zend Studio
    Par StefC30 dans le forum Zend Studio
    Réponses: 5
    Dernier message: 16/04/2008, 22h47
  4. Réponses: 5
    Dernier message: 04/03/2007, 15h33
  5. Interface SWT selon le modèle MVC
    Par LoloBebop dans le forum SWT/JFace
    Réponses: 6
    Dernier message: 05/07/2006, 16h27

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