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 :

[RCP] Affecter des données différentes à plusieurs instances d'une même vue


Sujet :

SWT/JFace Java

  1. #1
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut [RCP] Affecter des données différentes à plusieurs instances d'une même vue
    Bonjour à tous,

    Au risque de m'attirer la foudre des modérateurs , je me permet de poser cette question à la quelle je suis confronté.

    AJe dispose en ce moment de deux vues dans mon application RCP. Une vue de navigation et une vue de résultats. Suite à un click dans a vue de navigation, un nouvel onglet apparait dans ma vue de résultats avec les résultats correspondant au noeud selectionné. Malgré le fait que les onglets (instance de vue sont crées), je constate que les données viennent à chaque fois se "supperposer" sur celles qui étaient déjà existantes.

    Pour être plus clair, supposons que je dispose de 4 noeuds (ayant respectivement pour noms Noeud1, ..., Noeud4, et pour données les listes Data1, ..., Data4) dans mon arbre.

    Lorsque je clique sur le premier noeud, un onglet est crée avec pour nom "Data1". Ce n'est que quand j'aggrandit ma vue que mon tableViewer rempli des données "Data1" apparaît.

    Lorsque je clique sur le second noeud, un second onglet apparaît, avec cette fois ci pour nom "Data2" et un tableViewer rempli avec des "Data2". Dans le même temps, je constate que le nom de ma première colonne est changé est passe à "Data2". De même, quand j'"actualise" cet onglet, je constate qu'il y est présent deux tableViewers, celui rempli de "Data1" étant au dessus de celui rempli de "Data2".

    Ainsi, une fois que j'aurais cliqué successivement sur mes 4 noeuds, jme retrouve en fin de compte avec 4 onglets ayant pour nom "Data4"(le dernier noeud selectionné), et ayant pour données :
    - Onglets 1 : 4 tableViewers placés les uns sur les autres et ce dans l'ordre 1 -> 4 (ordre de clic)
    - Onglets 2 : les 3 tableViewers placés les uns sur les autres et ce dans l'ordre 2 -> 4 (ordre de clic)
    - Onglets 3 : les 2 tableViewers placés les uns sur les autres et ce dans l'ordre 3 -> 4 (ordre de clic)
    - Onglets 4 : le dernier tableViewer(4).

    Je solllicite donc votre précieuse aide afin de pouvoir m'en sortir.

    Deplus, au lancement de mon application, j'ai par defaut un onglet déjà présent (ce qui est normal vu qu'il correspond à ma vue de départ). Comment pourrais je faire pour partir d'une vue "vierge", un peu comme ce que l'on a sous eclipse(avant de doublecliquer sur une classe afin de pouvoir l'afficher, la vue devant les contenir ne contient aucun onglet).

    Merci infiniment

  2. #2
    Membre confirmé Avatar de desert
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 414
    Points : 479
    Points
    479
    Par défaut
    Salut papaetoo,
    Comment t'y prends-tu pour distinguer différemment les instances de ta vue de résultats ?
    Peut-être qu'en cliquant sur un nœud, tu rafraichies plusieurs instances de la vue et non une seule en particulier.
    Pour la vue vierge, il suffit de ne rien mettre dans la méthode createPartControl() de ta vue de résultats (il faudra donc faire des vérifications).

  3. #3
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Merci desert pour ta réponse et pour toutes celles passées.
    omment t'y prends-tu pour distinguer différemment les instances de ta vue de résultats ?
    Dans mon fichier xml de configuration de vues, j'ai mis l'attribut allouMultiple à "true". Dans ma classe perspective, j''ai ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    layout.addStandaloneView(NavigationView.ID,  false, IPageLayout.LEFT, 0.25f, editorArea);
    		IFolderLayout folderResults = layout.createFolder("Results", IPageLayout.BOTTOM, 0.5f, editorArea);
    		folderResults.addPlaceholder(View.ID + ":*");
    		folderResults.addView(View.ID);
    "View" représente ici ma vue de résultats. C'est celle là même qui est instancié suite au click sur un noeud de l'arbre.

    Enfin, dans cette même classe "View", dans mon "selectionChanged", j'affiche l'instance de ma vue une fois que j'ai récupéré la selection(suite au click sur un noeud de l'arbre).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(View.ID, Integer.toString((instanceNum)), IWorkbenchPage.VIEW_CREATE);
    "instanceNum" est initialisé à 0.

    Pour la vue vierge, il suffit de ne rien mettre dans la méthode createPartControl() de ta vue de résultats (il faudra donc faire des vérifications)
    Ba, à le fait de ne rien mettre dans mon createPartControl signifie que je ne peux instancier ma vue par la suite (car aucune ligne de code me permettant de le faire). A moins que cela sois les vérifications dont tu parles?

    En cas de besoin, je pourrais te passer mon source.

    Merci une fois de plus

  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 : 39
    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
    Bonjour à tous,

    Bon, je me replonge dans ton problème... Je vais retracer ce que j'ai compris de ton problème pour tout mettre à plat (parce que sinon, il va encore y avoir des quiproquos). Alors dans ta première vue (que l'on va nommer Data) tu as des données que tu veux visualiser, à chaque fois que la sélection change dans la vue Data, dans une seconde vue (que l'on va appeler Result).
    Donc, je suppose que tu as une classe pour la vue Data qui doit être à peu près comme ça :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class DataView extends ViewPart implements ISelectionChangedListener {
        ...
        public void selectionChanged(SelectionChangedEvent event) {
            openResultView();
        }
    }
    et une classe pour la vue Result qui doit ressembler à ça :
    Code java : 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
    public class ResultView extends ViewPart {
     
        private Composite viewComposite;
        ...
        public void createPartControl(Composite parent) {
            viewComposite = new Composite(parent, SWT.NONE);
        }
     
        public void setViewerInput(Object anInput) {
            if (viewComposite != null && !viewComposite.isDisposed) {
                TableViewer viewer = new TableViewer(viewComposite, SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
                viewer.setContentProvider(...);
                viewer.setInput(anInput);
     
                // Ici, ajoute ce que tu veux au Composite...
            }
        }
    }
    Je comprends pas où sont tes problèmes...

    Au passage, je te déconseille de choisir un compteur pour les id secondaires de ta vue Result. A moins que tu ne saches parfaitement le retrouver.

    Voilà, a+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  5. #5
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Bjr à tous et merci pour vos posts.

    Je dispose éffectivement de deux vues (NavigationView et ResultsView). La première contenant un treeViewer et la seconde un tableViewer.

    Dans ma première vue, j'ajoute le treeViewer au service de selection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getSite().setSelectionProvider(treeViewer);
    Dans ma seconde vue, je recupère et "traite" cette selection :
    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
     
    this.getSite().getWorkbenchWindow().getSelectionService().addSelectionListener("fast.navigationview", new ISelectionListener(){			
    	public void selectionChanged(IWorkbenchPart part, ISelection selection) {					
    		if (selection == null) {return;}
    		if (selection instanceof IStructuredSelection) {															
    			IStructuredSelection ss = (IStructuredSelection)selection;
    			if (ss.getFirstElement() != null){ //if the selection is != of null						
    				if (ss.getFirstElement().getClass() == SubModule.class) {
    					myQuery = new Query(((SubModule) ss.getFirstElement()).getQuery().getName());
    					myDataSource = ((SubModule)ss.getFirstElement()).getDataSource();														
    					modelProvider = new ModelProvider(myQuery, myDataSource);																													
    					viewer = createTableViewer(parent, modelProvider);														
    					try {								
    						Activator.getLogger().info("instanceNumBefore = "+ instanceNum);
    						PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(ResultView.ID, Integer.toString((instanceNum)), IWorkbenchPage.VIEW_CREATE);
    						instanceNum++;
    						setPartName( ((SubModule)ss.getFirstElement()).getName());						
    						//notify of changes to the name 
    						firePropertyChange(IWorkbenchPartConstants.PROP_PART_NAME);
    					} catch (PartInitException e) {
    						e.printStackTrace();
    					}																						
    				}
    				else{							
    					MessageDialog.openInformation(getSite().getShell(),"Ouverture","Veuillez ouvrir le fichier");
    				}
    			}				
    		}										
    	}
    }
    - createTableViewer(parent, modelProvider) : permet de créer un tableViewer, à partir d'un composite parent et d'un modelProvider.
    - modelProvider : classe me permettant de définir mes objets metiers(ceux qui sont affichés dans le tableViewer). Donc, le clic sur un noeud du NavigationView me fournit une selection(contenant une requête et une DataSource). Cette selection est donc passée au modelProvider, qui en fonction de la requête et du dataSource recupère et fournit les objets metiers.

    Comme je l'ai expliqué dans mes posts plus hauts, je recupère bien ma selection à chaque fois, mais c'est la gestion des multiples instances qui n'est pas correcte (voir premier message du post pour plus de compréhension). Au besoin, je posterais mes sources et des captures d'écran de ce que j'ai.

    Merci une fois de plus

  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 : 39
    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
    Poste le code de tes vues s'il te plait...

    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  7. #7
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Bjr

    Je passes mes sources en pièces jointes.

    En attendant votre retour, merci!
    Fichiers attachés Fichiers attachés

  8. #8
    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 : 39
    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
    A ce que j'ai pu voir de ton code, c'est l'input de ton TableViewer qui ne va pas...
    Essai de regarder les retours de ta méthode modelProvider.getTblRows() à chaque appel de ta méthode de création. Passe en debug cette méthode à chaque ajout d'une nouvelle vue.
    C'est tout ce que je vois. Mais j'ai peut-être loupé des trucs...

    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  9. #9
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Tu trouveras en PJ modifiée (pour pas me faire taper sur les doigts) une capture d'écran de ce que j'obtiens :

    Comme tu peux le remarquer, je dispose de 2 noeuds et de 3 sous noeuds dans ma vue de navugation. Je clique successivement sur "Sous Noeud 1.1", "Sous Noeud 1.2", et "Sous Noeud 2.1".

    Lors du premier click, une intance de ma vue resultView est crée. Il a pour bien pour nom ""Sous Noeud 1.1"" et contient les données correspondantes.

    Lors du second click, une intance de ma vue resultView est crée. Il a pour bien pour nom ""Sous Noeud 1.2"" et contient les données correspondantes. Cependant, la première instance est mise à jour, son nom devient ""Sous Noeud 1.2"", et il contient deux tables, la plus récente étant en dessous.

    Le même phénomène est observé lors du troisieme click et j'obtiens donc la figure qui est PJ.

    Donc, jne crois pas que le problème sois celui de la récupération des données via le modelProvider (la preuve est que je les ai bien à chaque fois). Je crois que, débutant de mon état, je dois "mal" faire quelque chose, sois jne rafraichis pas ce qu'il faut rafraichir, sois je passe mes données à toutes mes instances, sois,... , jne sais plus quoi dire.

    Voilà, en espérant que cela puisse aider à résoudre mon pb.

    Merci
    Images attachées Images attachées  

  10. #10
    Membre confirmé Avatar de desert
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 414
    Points : 479
    Points
    479
    Par défaut
    Pour revenir sur ce que j'ai dis, si tu souhaites créer un emplacement à droite sans aucun ResultView affiché, tu dois créer un IFolderLayout dans la méthode createInitialLayout() de ta perspective à la place de la vue ResultView.
    Tu aurais donc :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void createInitialLayout(IPageLayout layout) {
        //création de la vue de gauche
        layout.addView("navigationview", etc...);
        //création du conteneur vide à droite qui contiendra les autres vues.
        layout.createFolder("myfolder", etc...);
    }
    Pour reprendre ce que tu as fait, dans NavigationView, il y aurait :
    Code java : 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
    treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent event) {
            TreeSelection ts = (TreeSelection) event.getSelection();
            if (ts == null || ts.isEmpty()) 
                return;
            String name = "";
            Object element = ts.getFirstElement();
            if (element instanceof Module) {
                Module modNode = (Module) element;
                name = modNode.getName();					
            } else {						
                SubModule subModNode = (SubModule) element;
                name = subModNode.getName();
                Activator.getLogger().info("Le status en cas de sous module : " + name);
                //Activation de la vue de droite = création si elle n'existe pas / affichage si elle existe.
                ResultView view = 
                    (ResultView) getViewSite().getWorkbenchWindow()
                        .getActivePage().showView("fast.resultview", name,
                            IWorkbenchPage.VIEW_ACTIVATE);
                view.setPartName(name); 
                view.refreshColumns(new MyProvider(parametres));
            }
            getViewSite().getActionBars().getStatusLineManager().setMessage("Selected : " + name);
        }
    });
    Et dans ResultView :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void createPartControl(Composite parent) {
        //création du TableViewer
    }
    public void refreshColumns(MyProvider provider) {
        //effacement + création des nouvelles colonnes grâce au provider qui contient les données de la bdd.
    }
    public void setPartName(String title) {
        //ajout du nom du noeud au titre de la vue
        super.setPartName(title);
    }

  11. #11
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Merci desert pour ta réponse qui je le sens va m'être tres précieuse.

    Juste une petite question avant de me lancer là dedans.
    Pour revenir sur ce que j'ai dis, si tu souhaites créer un emplacement à droite sans aucun ResultView affiché, tu dois créer un IFolderLayout dans la méthode createInitialLayout() de ta perspective à la place de la vue ResultView.
    J'ai bien un "IFolderLayout" dans la perpective. Ma perspective a d'aileurs la tête suivante :
    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
    public class Perspective implements IPerspectiveFactory {	
    	public static final String ID = "fast.perspective";
    	public void createInitialLayout(IPageLayout layout) {
    		String editorArea = layout.getEditorArea();
    		layout.setEditorAreaVisible(false);			
    		layout.addStandaloneView(NavigationView.ID,  true, IPageLayout.LEFT, 0.25f, editorArea);		
    		layout.addStandaloneView(FilterView.ID, true, IPageLayout.TOP, 0.3f, editorArea);						
    		IFolderLayout folderResults = layout.createFolder("Results", IPageLayout.BOTTOM, 0.5f, editorArea);
    		folderResults.addPlaceholder(ResultView.ID + ":*");
    		folderResults.addView(ResultView.ID);		
    		layout.getViewLayout(NavigationView.ID).setCloseable(false);		
    		layout.getViewLayout(FilterView.ID).setMoveable(false);				
    		layout.addPerspectiveShortcut(Perspective.ID);										
    	}
    }
    Ce que je voudrais , c'est qu'au lancement de mon application, je ne voudrais pas d'onglet par defaut déjà présent (onglet qui correspond en fait à ma vue de départ). Comment pourrais je faire pour partir d'une vue "vierge", un peu comme ce que l'on a sous eclipse(avant de doublecliquer sur une classe afin de pouvoir l'afficher, la vue devant les contenir ne contient aucun onglet).

    Pour le reste, je m'y met de suite et je vous tiens au courant (j'en connais un qui va pas manger ce midi).

  12. #12
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Une fois de plus, merci Desert pour ta réponse. Grâce à elle, j'ai vachement avancé. Cependant, il subsiste quelques ptits soucis.

    J'arrive à présent, grâce à un click sur un noeud dans ma NavigationView, à activer(créer si elle n'existe pas, afficher sinon) la vue une vue avec les bonnes données(contenu et nom). Cependant, lorsque je sélecionne sur un noeud déja sélectionné, la bon onglet est affiché, mais les données elles sont en double. A titre d'exemple, si j'ai obtenu 5 colonnes lors du premier click, j'obtiendrais 10 (les 5 colonnes dupliquées). Par contre, les colonnes qui sont dupliquées n'ont pas de données.

    D'ou peux venir le problème d'apres vous?

    ResultView :
    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
     
    private TableViewer viewer;	
     
    public void createPartControl(final Composite parent) {						
    	viewer = createViewer(parent);							
    }
     
    public TableViewer getViewer() {
    	return viewer;
    }
     
    private TableViewer createViewer(Composite parent){		 
    	TableViewer viewer = new TableViewer(parent, SWT.FULL_SELECTION | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);			
    	// On active la sélection pour le mini filter
    	getSite().setSelectionProvider(viewer);		
    	// On active le Sorter sur notre table
    	tableSorter = new TableSorter();
    	viewer.setSorter(tableSorter);
    	filter = new DataRowFilter();
    	viewer.addFilter(filter);	
    	// Layout the viewer
    	GridData gridData = new GridData();
    	gridData.verticalAlignment = GridData.FILL;
    	gridData.horizontalSpan = 2;
    	gridData.grabExcessHorizontalSpace = true;
    	gridData.grabExcessVerticalSpace = true;
    	gridData.horizontalAlignment = GridData.FILL;	
    	viewer.getControl().setLayoutData(gridData);
    	viewer.getTable().setHeaderVisible(true);
    	viewer.getTable().setLinesVisible(true);
    	return viewer;
    }
     
    public void refreshColumns(TableViewer viewer, ModelProvider modelProvider) {	
    	viewer.getTable().removeAll();// .clearAll();			
    	viewer.refresh();	
    	createColumns(viewer, modelProvider.getHearders());	// fonction permettant de constuire les colonnes (n'a pas changé)
    	viewer.setContentProvider(new DataRowContentProvider());
    	viewer.setLabelProvider(new DataRowLabelProvider());		
    	viewer.setInput(modelProvider.getTblRows());			
    }
    NavigationView
    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
     
    treeViewer.addSelectionChangedListener(new ISelectionChangedListener(){
    	public void selectionChanged(SelectionChangedEvent event) {												
    		TreeSelection ts = (TreeSelection)event.getSelection();
    		 if (ts == null || ts.isEmpty()) 
    				return;
    		String name = "";
    		Object element = ts.getFirstElement();
    		if (element instanceof Module) {
    			Module modNode = (Module) element;
    			name = modNode.getName();					
    		} else {
    			SubModule subModNode = (SubModule) element;
    			name = subModNode.getName();		            
    			myQuery = new Query(subModNode.getQuery().getName());
    			myDataSource = subModNode.getDataSource();			
    			//Activation de la vue de droite = création si elle n'existe pas / affichage si elle existe.
    			ResultView view = null;
    			try {
    				view = (ResultView) getViewSite().getWorkbenchWindow().getActivePage().showView("fast.resultview", name, IWorkbenchPage.VIEW_ACTIVATE);
    			} catch (PartInitException e) {
    				Activator.getLogger().error(e.toString());
    			}
    			view.setPartName(name); 			
    			view.refreshColumns(view.getViewer(), new ModelProvider(myQuery, myDataSource));
    		}
    		getViewSite().getActionBars().getStatusLineManager().setMessage("Selected : " + name);
    	}
    });
    Je sens que jy suis presque; mais j'ai besoin de vos yeux. Merci à tous

  13. #13
    Membre confirmé Avatar de desert
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 414
    Points : 479
    Points
    479
    Par défaut
    As-tu essayé de supprimer les anciennes colonnes avant d'en ajouter les nouvelles qui arrivent lors du clic ?
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void refreshColumns(TableViewer viewer, ModelProvider modelProvider) {
        //Suppression les colonnes par ordre d'apparition
        if (table.getColumnCount() > 0) {
            for(int i = table.getColumnCount()-1; i <= 0; i--) {
                table.getColumn(i).dispose();
            }
        }
        //etc...
    }

  14. #14
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Oui, je l'avais déja essayé, mais ca me donne le même résultat. En plus j'ai oublié de préciser tout à l'heure qu'en plus de la concaténation des colonnes, j'avais également une exception du type java.lang.ArrayIndexOutOfBoundsException.

  15. #15
    Membre confirmé Avatar de desert
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 414
    Points : 479
    Points
    479
    Par défaut
    J'ai corrigé le code posté plus haut. Normalement, cela devrait aller.

  16. #16
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Bjr Desert,

    Je dois être passé à coté de quelque chose. Car comme je l'ai dis dans mon post plus haut, bien avant que tu me recommande de disposer les colonnes, je l'avais deja fais. Mais j'ai tjrs le même problème. Je suis en train de déboguer. Je vous tiens au courant.

    Merci

  17. #17
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Rebonjour à tous.

    je ne vois décidement pas comment résoudre ce problème, qui je le rapelle est celui de pouvoir disposer les colonnes d'un tableViewer en vue d'en créer d'autres. En général, ce problème se substitue également à un autre sur le quel jsuis en train de plancher : celui de du rafraichissement d'une vue.

    Je dispose en effet d'une vue dans mon application. Cette vue est contstruite dynamiquement en fonction du noeud que j'aurais selectionné dans ma fenêtre de navigation. Cepedant, une fois que j'ai selectionné un noeud et que je selectionne un autre (ou le même d'ailleurs), la vue n'est pas rafraichie et les autres widgets se créent à la suite des précédentes.

    je serais donc extremement reconnaissant pour l'aide que vous pouriez m'apporter.

    Merci

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

Discussions similaires

  1. Synchroniser des données entre plusieurs instances d'une même application
    Par wil4linux dans le forum Windows Presentation Foundation
    Réponses: 10
    Dernier message: 12/02/2013, 13h58
  2. [XL-2007] Copier des données de plusieurs classeurs sur une feuille récap
    Par chipster008 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/08/2011, 11h12
  3. Insérer des données sur plusieurs lignes dans une seule en SQL
    Par nathantahiti dans le forum Développement
    Réponses: 1
    Dernier message: 03/08/2011, 10h47
  4. [XL-2003] Compilation des données de plusieurs feuilles en une seule?
    Par USnico dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/11/2009, 18h08
  5. Réponses: 7
    Dernier message: 03/12/2008, 15h18

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