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 :

Changer de vue


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    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
    Par défaut Changer de vue
    Bonjour à tous

    J'ai un petit problème étant donné que je suis débutant dans Eclispe RCP et SWT.

    J'ai donc une application RCP avec 3 vues qui prennent toute la fenêtre.
    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
     
    package com.eclipse.rcp.app1;
     
    import org.eclipse.ui.IPageLayout;
    import org.eclipse.ui.IPerspectiveFactory;
    import org.eclipse.ui.IViewLayout;
     
    public class Perspective implements IPerspectiveFactory {
     
    	public void createInitialLayout(IPageLayout layout) {
    		// On masque la zone d'édition
    	    layout.setEditorAreaVisible(false);
     
    		String editorArea = layout.getEditorArea();
     
    	    // Affichage de la vue "Etapes"
    	    layout.addView("com.eclipse.rcp.app1.etapes",
    	    		IPageLayout.LEFT, 0.15f, editorArea);
    	    IViewLayout viewEtapes = layout.getViewLayout("com.eclipse.rcp.app1.etapes");
    	    viewEtapes.setCloseable(false);
     
    	    //Affichage de la vue "Compléments"
    	    layout.addView("com.eclipse.rcp.app1.complements",
    	    		IPageLayout.BOTTOM, 0.7f, editorArea);
    	    IViewLayout viewComplements = layout.getViewLayout("com.eclipse.rcp.app1.complements");
    	    viewComplements.setCloseable(false);
     
    	    //Affichage de la vue "Paramétrages"
    	    layout.addView("com.eclipse.rcp.app1.parametrageStep1",
    	    		layout.TOP, layout.RATIO_MAX, editorArea);
    	    IViewLayout viewParametrageStep1 = layout.getViewLayout("com.eclipse.rcp.app1.parametrageStep1");
    	    viewParametrageStep1.setCloseable(false);
     
    	    /**layout.addView("com.eclipse.rcp.app1.parametrageStep2",
                            layout.TOP, layout.RATIO_MAX, editorArea);
                IViewLayout viewParametrageStep2 = layout.getViewLayout("com.eclipse.rcp.app1.parametrageStep2");
                viewParametrageStep2.setCloseable(false);*/
     
    	}
     
    }
    Ma vue principale étant parametrageStep1. Au départ j'ai essayé de créer la vue parametrageStep2 mais c'est impossible (surement parcequ'il n'y a plus de place).

    Donc j'ai codé ma vue parametrageStep1 et ensuite j'ai un bouton "suivant". Jaimerai savoir comment faire lorsque je clique sur ce bouton pour fermer la vue et en créer une nouvelle qui prend sa place ?

    Je vous remercie de 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 : 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,

    Niveau utilisateur, ça va être un peu perturbant non?
    Tu cliques sur un bouton d'une vue, ça ferme cette vue et ça en ouvre une autre? Pourquoi utiliser 2 vues? Selon moi, tu as 2 possibilités (au moins):
    • Soit tu changes le contenu de ta première vue.
    • Soit tu passes plutôt par un Wizard. Enfin, tout dépend de ce que tu souhaites afficher.
    Dis nous en plus sur ton contexte, si tu peux / veux. Sinon, si tu tiens réellement à faire ceci, ça reste assez simple à mettre en œuvre:
    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
    final IWorkbenchWindow iActiveWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
    if (iActiveWorkbenchWindow != null) {
      final IWorkbenchPage iActivePage = iActiveWorkbenchWindow.getActivePage();
      if (iActivePage != null) {
        final IViewPart iMyView = iActivePage.findView("my.view.id");
        if (iMyView != null) {
          iActivePage.hideView(iMyView);
          try {
            iActivePage.showView("my.second.view");
          } catch (final PartInitException iException) {
            iException.printStackTrace();
          }
        }
      }
    }
    Voilà, à+
    Gueritarish

  3. #3
    Membre éclairé
    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
    Par défaut
    Bhe je ne pense pas que je devrai changer le contenue de la vue. En effet par la suite j'aimerai pouvoir passer d'une vue à une autre en cliquant sur le numéro de l'étape. Dans la vue de gauche j'aurai toutes les étapes qui représenteront une vue et ainsi pouvoir aller directement à une vue en cliquant sur l'étape associée.

    Et sinon suivant ta proposition de code le problème c'est que ma seconde vue "n'est pas en place".

    Dans le code que j'ai mis je n'ai pas pu l'insérer dans le layout.

  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 : 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
    C'est parce qu'il te faut modifier la définition du layout de ta perspective.
    Il te faut inclure un placeholder (zone qui va définir où ta vue sera ouverte):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Affichage de la vue "Paramétrages"
    IFolderLayout iMainLayout = layout.createFolder("topFolder", layout.TOP, layout.RATIO_MAX, editorArea);
    iMainLayout.addView("com.eclipse.rcp.app1.parametrageStep1");
    iMainLayout.addPlaceholder("com.eclipse.rcp.app1.parametrageStep2");
    IViewLayout viewParametrageStep1 = layout.getViewLayout("com.eclipse.rcp.app1.parametrageStep1");
    viewParametrageStep1.setCloseable(false);
    Voilà, à+
    Gueritarish

  5. #5
    Membre éclairé
    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
    Par défaut
    Excuse moi mais je n'ai pas trop compris ce que tu as fait Gueritarish

    De plus j'ai testé mais j'ai ce message :

    !MESSAGE Unable to find view with id: com.eclipse.rcp.app1.parametrageStep2, when creating perspective com.eclipse.rcp.app1.perspective

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    tu peux te baser sur les org.eclipse.jface.wizard.Wizard pour faire ça : habituellement on utilise un dialogue pour les wizard, mais on peut rendre un éditeur ou une vue parent du wizard. Ainsi tu bénéficie du mécanisme des wizards pour tes changements d'étapes.

    Dans la méthode createPartControl tu crées un composite, qui te servira de parent à ton wizard, passé dans le constructeur.

    Il faudra implémenter l'interface org.eclipse.jface.wizard.IWizardContainer sur ta vue (ou ton éditeur) et indiquer à ton wizard que son container est la vue ou l'éditeur. Utilise un StackLayout pour le layout des pages. Il faudra également créer les boutons, et les brancher sur les méthodes du wizard, pour changer de page, annuler ou valider (branché sur les méthodes de sauvegarde de l'éditeur le cas échéant).

    Tu peux prendre exemple sur les sources de la classe WizardDialog pour te guider pour une implémentation complète.

    Canevas de base rapide pour un une vue :

    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
    public abstract class AbstractWizardView 
    extends ViewPart implements IWizardContainer {
     
    public void createPartControl(Composite parent) {
     
                    container = new Composite( parent, SWT.NONE );
     
    		layout = new StackLayout();
    		container.setLayout( layout );
    		wizard = new SamplelWizard(container) {	
     
    				@Override
    				public IWizardContainer getContainer() {
    					return AbstractWizardView.this;
    				}
    			};
     
                    wizard.addPages();
     
    parent.addDisposeListener( new DisposeListener() {
     
    			public void widgetDisposed(DisposeEvent e) {
    				wizard.dispose();
    			}
    		} );
     
                    createButtonBar( parent );
     
                    IWizardPage startingPage = wizard.getStartingPage();
    		if (startingPage == null) {
    			log.warn("no starting page for wizard");
    		} else {
    			startingPage.createControl(root);
    			showPage(startingPage);
    		}
     
            ...
         }
     
    public void showPage(IWizardPage page) {
    		if (page != currentPage) {
    			IWizardPage old = currentPage;
    			currentPage = page;
    			layout.topControl =  page.getControl();
     
    			if( old != null ) {
    				old.setVisible( false );
    			}
    			page.setVisible( true );
    			container .layout();
    			update();
    		}
    	}
     
            // exemple pour le code pour avancer dans les pages:
         protected void nextPressed() {
    			IWizardPage page = currentPage.getNextPage();
    				showPage(page);
    	}
     
    ...
     
    public IWizardPage getCurrentPage() {
    		return currentPage;
    	}
    ...
     
    public Shell getShell() {
    		return getSite().getShell();
    	}
     
    ...
     
    public void updateButtons() {
    		boolean canFlipToNextPage = false;
    		boolean canFinish = wizard.canFinish();
    		if (backButton != null) {
    			backButton.setEnabled(currentPage.getPreviousPage() != null);
    		}
    		if (nextButton != null) {
    			canFlipToNextPage = currentPage.canFlipToNextPage();
    			nextButton.setEnabled(canFlipToNextPage);
    		}
    		finishButton.setEnabled(canFinish);
    		if (canFlipToNextPage && (!canFinish || forceNextDefault )) {
    			getShell().setDefaultButton(nextButton);
    		} else {
    			getShell().setDefaultButton(finishButton);
    		}
    	}
     
    ....
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre éclairé
    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
    Par défaut
    Salut joel.drigo. Merci pour ton aide. C'est obligatoire de passer par les Wizard ?

    Je ne m'y connais psa trop mais j'ai déjà créer toute ma première vue avec les listeners. J'ai peur de devoir "casser" pas mal de chose.

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Non, non, c'est pas obligatoire.

    Je trouve ça personnellement plutôt clean. C'est vrai que ça demande pas mal de boulot, mais quand l'abstraction est faite, elle est réutilisable.

    Après c'est toi qui voit.

    Mais a mon avis essayer de jongler avec plusieurs vues risque d'être assez siouxe à mettre au point, et tu pourras jamais être sur qu'un utilisateur trouvera pas un moyen (involontairement ou pas) de tout faire foirer (genre afficher 2 étapes en même temps et ensuite faire foirer ton système de changement d'étape), ou s'il y a pas une autre faille, avec la MRU, ou avec les preférences d'Eclipse, le docking et plein d'autres choses.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Changer la vue de source de données d'un cube
    Par phenomeno dans le forum SSAS
    Réponses: 1
    Dernier message: 30/10/2012, 15h40
  2. [RCP]Comment changer de vue avec mon plugin ?
    Par Cpt Anderson dans le forum Eclipse Platform
    Réponses: 14
    Dernier message: 15/12/2010, 12h43
  3. BIG HELP : changer de vue
    Par romeo9423 dans le forum MFC
    Réponses: 2
    Dernier message: 19/05/2007, 19h23
  4. changer de vue et de doc
    Par LesLemmings dans le forum MFC
    Réponses: 10
    Dernier message: 07/05/2007, 12h02
  5. SDI - changer de vue en cliquant sur un bouton
    Par Psykotik dans le forum MFC
    Réponses: 3
    Dernier message: 29/11/2005, 16h09

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