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

Eclipse Platform Discussion :

Refresh d'un viewPart avec un piechart (JFreeChart)


Sujet :

Eclipse Platform

  1. #1
    Membre habitué Avatar de kkt8
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 472
    Points : 193
    Points
    193
    Par défaut Refresh d'un viewPart avec un piechart (JFreeChart)
    Bonjour,

    Je fais une viewPart que j'ouvre à partir d'un popup menu.
    Cette viewPart affiche un PieChart à partir des infos du fichier qui est sélectionné, à l'ouverture tout est OK, ça fait ce que je veux :
    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
     
    private String executableToChart = null;
    Composite parentView;
    ChartComposite compoChart = null;
    JFreeChart chart = null;
     
    public void createPartControl(Composite parent) {
     
    	parentView = parent;
    	if(executableToChart == null){
    	ISelection selection = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().getSelection();
    	if(selection instanceof TreeSelection){
    		TreeSelection ts = (TreeSelection)selection;
    		TreePath[] treePath = ts.getPaths();
    		Object oFile = treePath[0].getFirstSegment();
    		if ((oFile != null) && (oFile instanceof IBinary)) {
    			IBinary bin = (IBinary) oFile;
    			IResource f = bin.getResource();
    			executableToChart = f.getLocation().toString();
    		}
    	        }
    		}
     
    	createChart(executableToChart, 1);		    
    	}
     
    private void createChart(String exe, int i){
    		DefaultPieDataset data = createDataSet(exe,i);
     
    	    //create a chart...
    		chart = null;
    		chart=ChartFactory.createPieChart( "SamplePieChart", data, true/*legend?*/,true/*tooltips?*/, false/*URLs?*/);
     
    	   compoChart = null;
    	   compoChart = new ChartComposite(parentView, SWT.NONE, chart, true);
     
    	}
    // just for test : simple data
    private DefaultPieDataset createDataSet(String executable, int test){
    		//create a dataset...
    	    DefaultPieDataset data=new DefaultPieDataset();
    	    if(test == 1){
    		    data.setValue("Category1",43.2);
    		    data.setValue("Category2",27.9);
    		    data.setValue("Category3",79.5);
    	    }
    	    if(test == 2){
    	    	data.setValue("OtherCategory1",63.2);
    		    data.setValue("OtherCategory2",17.9);
    		    data.setValue("OtherCategory3",29.5);
    	    }
     
    	    return data;
    	}
    Mais, sur changement de sélection (si la view est ouverte) je voudrais mettre à jour mon PieChart avec les nouvelles informations de ce nouveau fichier sélectionné :
    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
     
    public void showSelection(ISelection selection) {
    	// change le projet actif
    	if (!selection.isEmpty()) {
    		if (selection instanceof TreeSelection) {
    			TreeSelection ts = (TreeSelection)selection;
    			TreePath[] treePath = ts.getPaths();
    			Object oFile = ts.getFirstElement();
    			if (oFile != null) {
    				if (oFile instanceof IBinary) {
    					IBinary bin = (IBinary) oFile;
    					IResource f = bin.getResource();
    					setExecutable(f.getLocation().toString());
    					createChart(f.getLocation().toString(), 2);
    				}}
    			}
    		}
    	}
    A priori, rien ne se passe lorsque je sélectionne un nouveau fichier, cependant lorsque j'iconifie (minimize) la view et que je la maximize j'ai 2 PieCharts, l'un avec les data du 1er dataset et l'autre avec le 2eme dataset.

    J'ai bien créé mon 2 camemberts, mais je voudrais ET effacer le 1er ET forcer le redraw de la vue pour ne pas avoir à iconifier bien sur !

    Est-ce que quelqu'un peut saurait comment je dois m'y prendre ?
    Merci

  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 : 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
    Salut,

    Alors, le fait que tu ais 2 graphiques qui se créent est normal. En effet, dans ta méthode createChart tu crées un ChartComposite à partir du Composite parent. A chaque fois. Donc, si tu rappelles 15 fois ta méthode, tu auras 15 graphiques d'affilés
    Ce qu'il se passe, c'est que tu essayes de mettre ton compoChart à null. C'est mal. Il te faut faire un dispose dessus pour libérer cette ressource. Et en informer le layout du parent. Pour ce faire, je te conseille de modifier ta méthode createChart comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private void createChart(String exe, int i){
        DefaultPieDataset data = createDataSet(exe,i);
     
        //create a chart...
        chart = null;
        chart=ChartFactory.createPieChart( "SamplePieChart", data, true/*legend?*/,true/*tooltips?*/, false/*URLs?*/);
     
        if (compoChart != null && !compoChart.isDisposed) {
            compoChart.dispose();
            parentView.layout(true);
        }		
        compoChart = new ChartComposite(parentView, SWT.NONE, chart, true);
        parentView.layout();
    }
    Ça devrait fonctionner...
    Pour t'en convaincre, un petit programme:
    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
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.SelectionAdapter;
    import org.eclipse.swt.events.SelectionEvent;
    import org.eclipse.swt.layout.GridLayout;
    import org.eclipse.swt.layout.RowLayout;
    import org.eclipse.swt.widgets.Button;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Label;
    import org.eclipse.swt.widgets.Shell;
     
    public class Snippet {
     
        private static int number = 0;
     
        private static Composite secondComp;
     
        public static void main(String[] args) {
            Display display = new Display();
            final Shell shell = new Shell(display);
            shell.setLayout(new RowLayout(SWT.VERTICAL));
     
            final Composite comp = new Composite(shell, SWT.BORDER);
            comp.setLayout(new GridLayout());
     
            secondComp = new Composite(shell, SWT.BORDER);
            final Label label = new Label(comp, SWT.NONE);
            label.setText("test Composite...");
            Button button = new Button(comp, SWT.PUSH);
            button.setText("Magic Button");
            button.addSelectionListener(new SelectionAdapter() {
                /**
                 * {@inheritDoc}
                 */
                @Override
                public void widgetSelected(SelectionEvent e) {
                    if (!secondComp.isDisposed()) {
                        secondComp.dispose();
                        // Informe le layout du parent que son contenu a changé...
                        shell.layout();
     
                        secondComp = new Composite(shell, SWT.BORDER);
                        secondComp.setLayout(new GridLayout());
     
                        Label testLabel = new Label(secondComp, SWT.NONE);
                        String testNumber = "Created \\o/";
                        if (number == 0) {
                            testNumber += " first time";
                        } else {
                            testNumber += " " + number + " try";
                        }
                        number++;
                        testLabel.setText(testNumber);
     
                        shell.layout();
                    }
                }
            });
     
            secondComp.setLayout(new GridLayout());
            Label secondLabel = new Label(secondComp, SWT.NONE);
            secondLabel.setText("Second Composite label");
     
            shell.pack();
            shell.open();
            while (!shell.isDisposed()) {
                if (!display.readAndDispatch())
                    display.sleep();
            }
            display.dispose();
        }
    }
    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  3. #3
    Membre habitué Avatar de kkt8
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 472
    Points : 193
    Points
    193
    Par défaut
    MERCI !!!
    ça marche aux p'tits oignons !
    un grand merci à toi Gueritarish !

  4. #4
    Membre du Club
    Femme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 51
    Points
    51
    Par défaut
    Bonjour !

    Moi aussi je voudrais rafraîchir mon graphique avec un nouveaux dataset. Je l'ai changé, lancé l'event comme quoi il a changé mais ça ne me change pas le graphique.

    Je n'arrive pas à voir à quoi correspond le compoChart de cet exemple dans mon cas...

    j'ai bien un chartpanel, un jfreechart mais rien d'autre...

    et comme dans l'exemple on ne voit pas quand il sert...

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/11/2013, 09h19
  2. [Débutant] refresh d'un label avec un flash
    Par thierry007 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 24/11/2012, 10h10
  3. Enigme d'affichage avec NetBeans et JFreechart
    Par devoccasionnel dans le forum Interfaces Graphiques en Java
    Réponses: 19
    Dernier message: 20/07/2010, 00h23
  4. Réponses: 6
    Dernier message: 25/04/2005, 14h49
  5. Probleme de Refresh avec TQuery et DBGrid
    Par insoo dans le forum C++Builder
    Réponses: 7
    Dernier message: 25/11/2003, 17h20

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