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

Flex Discussion :

probleme de création d'une BarChart


Sujet :

Flex

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 31
    Points
    31
    Par défaut probleme de création d'une BarChart
    bonjour,

    je dois développer un barchart en flex/as3 dont les données proviennent d'un fichier xml résultat d'une sérialisation d'une hashmap java.

    Ni connaissant rien en flex j'ai naviguer à droite à gauche pour trouver des sources, tutoriaux, ...

    j'ai réussi à créer mon barchart, il prend bien les données (en abscisse on a le bon ordre de valeurs et les titres de la légendes sont les bons) mais il n'affiche pas les bar en elles même. J'ai beau chercher, essayer diverses choses, je ne comprends pas pourquoi ; ça doit être tout con pourtant.

    Mon code :
    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
     
    <?xml version="1.0"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp();" viewSourceURL="srcview/index.html">
    	<mx:Script><![CDATA[
    		import mx.charts.series.BarSeries;
    		import mx.charts.DateTimeAxis;
    		import mx.charts.series.LineSeries;
    		import mx.charts.CategoryAxis;
    		import mx.charts.Legend;
    		import mx.charts.series.ColumnSeries;
    		import mx.collections.ArrayCollection;
    		private function initApp():void {
     
    			var chargementXML:URLLoader = new URLLoader();
    			var fichier:URLRequest = new URLRequest("d:/test.xml");// le fichier xml
     
    			//évênement qui défini quand le chargement du fichier xml est terminé
    			chargementXML.addEventListener( Event.COMPLETE, chargementComplet );
    			chargementXML.load( fichier );
     
    			//quand le fichier xml est chargé 
    			function chargementComplet(pEvt:Event):void { 
     
    				var adresses:XML = new XML( pEvt.target.data ); //création de l'objet XML
    				var noeuds:XMLList = adresses.elements(); 
     
    				var mesures:Array = new Array(); //tableau contenant tous les titres des mesures
    				var index:int = 0;
     
    				//on parcourt une premiere fois le XML pour récupérer les titres des mesures
    				for each(var nodeTitreMesures:XML in noeuds..object) {
     
    					if( nodeTitreMesures.parent().string == "Programme Source") {
    						for each(var mesure:XML in nodeTitreMesures..string) {
    							mesures[index]=mesure;
    							index++;
    						}
    					}
    				}
     
    				var serieCollection:Array = new Array(); //tableau contenant les données pour le barchart
     
    				//on parcourt une deuxieme fois le XML pour créer le tableau des données
    				for each(var nodeTitre:XML in noeuds..object)
    				{
    					if( nodeTitre.parent().string != "Programme Source") {
     
    						var indexValeur:int =0;
    						var data:ArrayCollection =  new ArrayCollection();
    						for each(var valeur:XML in nodeTitre..string) {
    							var content:Object;
     
    							//Object de type {Measure: "type de mesure", Measurement: valeur(int)}
    							content = {Measure: mesures[indexValeur]  ,Measurement: valeur};
    							data.addItem(content);
    							indexValeur++;
    						}
     
    						//on créé la série 
    						var localSeries:BarSeries = new BarSeries();
    	                	localSeries.dataProvider = data;
     
    	                	localSeries.xField = "Measurement";
    	                	localSeries.yField = "Measure";
    		                localSeries.displayName = nodeTitre.parent().string;
     
    		                //on ajoute la série dans la table des données.
    		                serieCollection.push(localSeries);
    					}
    				}
     
    				myChart.showDataTips = true;
    				myChart.dataProvider = serieCollection;
     
    				var vAxis:CategoryAxis = new CategoryAxis();
    				vAxis.dataProvider = serieCollection;
    				vAxis.categoryField = "Measure" ;
    				myChart.verticalAxis = vAxis;
     
    	            myChart.series = serieCollection;
    			}
    		}
    	]]></mx:Script>
    	<mx:Panel title="Line Chart avec nombre de Series variable">
    		<mx:BarChart id="myChart" showDataTips="true"/>
    		<mx:Legend dataProvider="{myChart}"/>
    	</mx:Panel>
    </mx:Application>
    mon fichier XML
    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
     
    <?xml version="1.0" encoding="UTF-8"?> 
    <java version="1.6.0_13" class="java.beans.XMLDecoder"> 
     <object class="java.util.HashMap"> 
      <void method="put"> 
       <string>Programme Source</string> 
       <object class="java.util.ArrayList"> 
        <void method="add"> 
         <string>Complexité des structures</string> 
        </void> 
        <void method="add"> 
         <string>Complexité des variables</string> 
        </void>  
       </object> 
      </void> 
      <void method="put"> 
       <string>HOB126C1</string> 
       <object class="java.util.ArrayList"> 
        <void method="add"> 
         <string>1.504</string> 
        </void> 
        <void method="add"> 
         <string>131</string> 
        </void> 
       </object> 
      </void> 
      <void method="put"> 
       <string>CDGET</string> 
       <object class="java.util.ArrayList"> 
        <void method="add"> 
         <string>4.0</string> 
        </void> 
        <void method="add"> 
         <string>6</string> 
        </void> 
       </object> 
      </void> 
     </object> 
    </java>
    merci d'avance.

  2. #2
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    sors ton handler chargementComplet de ta méthode initApp:

    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
    <?xml version="1.0"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp();" viewSourceURL="srcview/index.html">
    	<mx:Script><![CDATA[
    		import mx.charts.series.BarSeries;
    		import mx.charts.DateTimeAxis;
    		import mx.charts.series.LineSeries;
    		import mx.charts.CategoryAxis;
    		import mx.charts.Legend;
    		import mx.charts.series.ColumnSeries;
    		import mx.collections.ArrayCollection;
    		private function initApp():void {
     
    			var chargementXML:URLLoader = new URLLoader();
    			var fichier:URLRequest = new URLRequest("d:/test.xml");// le fichier xml
     
    			//évênement qui défini quand le chargement du fichier xml est terminé
    			chargementXML.addEventListener( Event.COMPLETE, chargementComplet );
    			chargementXML.load( fichier );
     
    		}
     
                    //quand le fichier xml est chargé 
    		function chargementComplet(pEvt:Event):void { 
     
    				var adresses:XML = new XML( pEvt.target.data ); //création de l'objet XML
    				var noeuds:XMLList = adresses.elements(); 
     
    				var mesures:Array = new Array(); //tableau contenant tous les titres des mesures
    				var index:int = 0;
     
    				//on parcourt une premiere fois le XML pour récupérer les titres des mesures
    				for each(var nodeTitreMesures:XML in noeuds..object) {
     
    					if( nodeTitreMesures.parent().string == "Programme Source") {
    						for each(var mesure:XML in nodeTitreMesures..string) {
    							mesures[index]=mesure;
    							index++;
    						}
    					}
    				}
     
    				var serieCollection:Array = new Array(); //tableau contenant les données pour le barchart
     
    				//on parcourt une deuxieme fois le XML pour créer le tableau des données
    				for each(var nodeTitre:XML in noeuds..object)
    				{
    					if( nodeTitre.parent().string != "Programme Source") {
     
    						var indexValeur:int =0;
    						var data:ArrayCollection =  new ArrayCollection();
    						for each(var valeur:XML in nodeTitre..string) {
    							var content:Object;
     
    							//Object de type {Measure: "type de mesure", Measurement: valeur(int)}
    							content = {Measure: mesures[indexValeur]  ,Measurement: valeur};
    							data.addItem(content);
    							indexValeur++;
    						}
     
    						//on créé la série 
    						var localSeries:BarSeries = new BarSeries();
    	                	localSeries.dataProvider = data;
     
    	                	localSeries.xField = "Measurement";
    	                	localSeries.yField = "Measure";
    		                localSeries.displayName = nodeTitre.parent().string;
     
    		                //on ajoute la série dans la table des données.
    		                serieCollection.push(localSeries);
    					}
    				}
     
    				myChart.showDataTips = true;
    				myChart.dataProvider = serieCollection;
     
    				var vAxis:CategoryAxis = new CategoryAxis();
    				vAxis.dataProvider = serieCollection;
    				vAxis.categoryField = "Measure" ;
    				myChart.verticalAxis = vAxis;
     
    	            myChart.series = serieCollection;
    		}
    	]]></mx:Script>
    	<mx:Panel title="Line Chart avec nombre de Series variable">
    		<mx:BarChart id="myChart" showDataTips="true"/>
    		<mx:Legend dataProvider="{myChart}"/>
    	</mx:Panel>
    </mx:Application>

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 31
    Points
    31
    Par défaut
    ça ne change rien :s

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 31
    Points
    31
    Par défaut
    ça me donne ça


  5. #5
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    écoute les events d'erreur de l'urlRequest pour vérifier que déjà tu as aucune erreur.

    Essayez de tracer le chemin réellement effectué dans ton code.


    et relis ton code, car j'ai déjà remarqué que ton instance de vAxis par exemple n'existe que dans ton handler, tu la déclare et l'instancie dans chargementComplet mais en dehors de cette méthode elle n'existe pas

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 31
    Points
    31
    Par défaut
    je suis pas sur de bien avoir tout compris (complètement noob en Flex et as dsl :s) mais voici ce que j'ai fait :
    - j'ai mis mon bloc de chargement du fichier xml dans un try...catch -> pas d'erreur
    - j'ai rajouté un listener pour voir les erreurs de chargements -> rien du tout
    - j'ai mis la déclaration de vAxis a l'exterieur du handler

    tout ça n'a rien changé, j'ai toujours le même résultat

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 31
    Points
    31
    Par défaut
    Bon je crois avoir trouver mon problème et c'est bien ce que tu disais à savoir le vAxis qui est toujours null.
    Par contre je ne vois pas comment le mettre autre part car si je le mets dans init les données n'auront pas encore été charger. Donc ma question est : comment lui dire d'attendre que le fichier soit fini de charger et autrement dit comment lui demander d'attendre la fin de la méthode chargementComplet pour que les données soient connues?

  8. #8
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    tu déclares ta variable en dessous de tes imports et tu l'instancie dans ton handler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import ...
     
    private var vAxis:CategoryAxis;
     
    ...
    ...
    ...
     
    //quand le fichier xml est chargé 
    function chargementComplet(pEvt:Event):void { 
          vAxis = new CategoryAxis();
          ...
    }

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  9. #9
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 31
    Points
    31
    Par défaut
    j'avais bien essayé cette solution mais non c'est pas ça en fait

    mon code remis à jour
    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
     
    <?xml version="1.0"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp();" viewSourceURL="srcview/index.html">
    	<mx:Script><![CDATA[
    		import mx.charts.series.BarSeries;
    		import mx.charts.DateTimeAxis;
    		import mx.charts.series.LineSeries;
    		import mx.charts.CategoryAxis;
    		import mx.charts.Legend;
    		import mx.charts.series.ColumnSeries;
    		import mx.collections.ArrayCollection;
     
    		private var vAxis:CategoryAxis;
    		private var serieCollection:Array; //tableau contenant les données pour le barchart
     
    		private function initApp():void {
     
    			var chargementXML:URLLoader = new URLLoader();
    			try {
    				var fichier:URLRequest = new URLRequest("d:/test.xml");// le fichier xml
     
    				//évênement qui défini quand le chargement du fichier xml est terminé
    				chargementXML.addEventListener( Event.COMPLETE, chargementComplet );
    				chargementXML.load( fichier );
    			}
    			catch (error:Error) {
    				trace(error);
    			}
     
    		}
     
     
            //quand le fichier xml est chargé 
    		private function chargementComplet(pEvt:Event):void { 
     
    				var adresses:XML = new XML( pEvt.target.data ); //création de l'objet XML
    				var noeuds:XMLList = adresses.elements(); 
     
    				var mesures:Array = new Array(); //tableau contenant tous les titres des mesures
    				var index:int = 0;
     
    				serieCollection = new Array();
     
    				//on parcourt une premiere fois le XML pour récupérer les titres des mesures
    				for each(var nodeTitreMesures:XML in noeuds..object) {
     
    					if( nodeTitreMesures.parent().string == "Programme Source") {
    						for each(var mesure:XML in nodeTitreMesures..string) {
    							mesures[index]=mesure;
    							index++;
    						}
    					}
    				}
     
     
    				//on parcourt une deuxieme fois le XML pour créer le tableau des données
    				for each(var nodeTitre:XML in noeuds..object)
    				{
    					if( nodeTitre.parent().string != "Programme Source") {
     
    						var indexValeur:int =0;
    						var data:ArrayCollection =  new ArrayCollection();
    						for each(var valeur:XML in nodeTitre..string) {
    							var content:Object;
     
    							//Object de type {Measure: "type de mesure", Measurement: valeur(int)}
    							content = {Measure: mesures[indexValeur]  ,Measurement: valeur};
    							data.addItem(content);
    							indexValeur++;
    						}
     
    						//on créé la série 
    						var localSeries:BarSeries = new BarSeries();
    	                	localSeries.dataProvider = data;
     
    	                	localSeries.xField = "Measurement";
    	                	localSeries.yField = "Measure";
    		                localSeries.displayName = nodeTitre.parent().string;
     
    		                //on ajoute la série dans la table des données.
    		                serieCollection.push(localSeries);
    					}
    				}
    			myChart.showDataTips = true;
    			myChart.dataProvider = serieCollection;
     
    			vAxis = new CategoryAxis();
    			vAxis.dataProvider = serieCollection;
    			vAxis.categoryField = "Measure" ;
    			myChart.verticalAxis = vAxis;
     
                		myChart.series = serieCollection;
     
    		}
    	]]></mx:Script>
    	<mx:Panel title="Line Chart avec nombre de Series variable">
    		<mx:BarChart id="myChart" showDataTips="true"/>
    		<mx:Legend dataProvider="{myChart}"/>
    	</mx:Panel>
    </mx:Application>

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 31
    Points
    31
    Par défaut
    bonjour,

    depuis le dernière fois j'ai testé pas mal de choses qui n'ont aboutie à rien:
    - soit les données ne sont pas chargées au moment de la création du chart
    - soit le chart n'a pas de "base" pour se créer. j'ai fait des tests en mettant :
    -- une variable statique au début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    		[Bindable]
    		private var profit04:ArrayCollection = new ArrayCollection([
    			{Month: "Jan", Profit: 2000},
    			{Month: "Feb", Profit: 1000},
    			{Month: "Mar", Profit: 1500}
    		]);
    -- des données que je charge par la suite dans une boucle
    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
     
    		[Bindable]
    		private var profit05:ArrayCollection = new ArrayCollection([
    			{Month: "Jan", Profit: 2200},
    			{Month: "Feb", Profit: 1200},
    			{Month: "Mar", Profit: 1700}
    		]);
     
    		[Bindable]
    		private var profit06:ArrayCollection = new ArrayCollection([
    			{Month: "Jan", Profit: 2400},
    			{Month: "Feb", Profit: 1400},
    			{Month: "Mar", Profit: 1900}
    		]);
     
    		var tab:Array = [profit05,profit06]
    --> là ca fonctionne car il a un modèle
    -- par contre si je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		[Bindable]
    		private var profit04:ArrayCollection = new 	ArrayCollection([{Month: "", Profit: 1}]);
    --> il n'a pas de modèle et créer un graphique vide.

    La je commence a ne plus trop avoir d'idées.

    mon code actuel :
    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
     
    <?xml version="1.0"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp();" viewSourceURL="srcview/index.html">
    	<mx:Script><![CDATA[
    		import mx.charts.series.BarSeries;
    		import mx.charts.DateTimeAxis;
    		import mx.charts.series.LineSeries;
    		import mx.charts.CategoryAxis;
    		import mx.charts.Legend;
    		import mx.charts.series.ColumnSeries;
    		import mx.collections.ArrayCollection;
     
    		[Bindable]
    		private var serieCollection:Array;
     
    		private function initApp():void {
    			var currentSeries:Array =  new Array();
    			var series:ColumnSeries;
     
    			var xml:XMLLoader = new XMLLoader();
    			xml.load("D:/test.xml");
     
    			serieCollection = xml.getResult();
     
     
    			for each ( var se:ArrayCollection in serieCollection ) {
    				series = new ColumnSeries();
    				series.dataProvider = se;
    				series.yField = "Profit";
    				series.xField = "Month";
    				series.displayName = "toto";
    				currentSeries.push(series);	
    			}
    			myChart.series = currentSeries;
    		}
    	]]></mx:Script>
    	<mx:Panel title="Column Chart">
    		<mx:ColumnChart id="myChart" dataProvider="{myChart}" showDataTips="true">
    			<mx:horizontalAxis>
    				<mx:CategoryAxis categoryField="Month"/>
    			</mx:horizontalAxis>
    		</mx:ColumnChart>
    		<mx:Legend dataProvider="{myChart}"/>
    	</mx:Panel>
    </mx:Application>
    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
    package
    {
    	import flash.events.Event;
    	import flash.net.URLLoader;
    	import flash.net.URLRequest;
     
    	import mx.collections.ArrayCollection;
     
    	public class XMLLoader
    	{
    		private var chargementXML:URLLoader;
    		private var serieCollection:Array; //tableau contenant les données pour le barchart
     
    		public function XMLLoader()
    		{
    			chargementXML = new URLLoader();
    		}
     
    		public function load(url:String):void {;
    			try {
    				var fichier:URLRequest = new URLRequest(url);// le fichier xml
     
    				//évênement qui défini quand le chargement du fichier xml est terminé
    				chargementXML.addEventListener( Event.COMPLETE, chargementComplet );
     
    				chargementXML.load( fichier );
    			}
    			catch (error:Error) {
    				trace(error);
    			}
    		}
            //quand le fichier xml est chargé 
    		private function chargementComplet(pEvt:Event):void { 
     
    				var adresses:XML = new XML( pEvt.target.data ); //création de l'objet XML
    				var noeuds:XMLList = adresses.elements(); 
     
    				var mesures:Array = new Array(); //tableau contenant tous les titres des mesures
    				var index:int = 0;
     
    				serieCollection = new Array();
     
    				//on parcourt une premiere fois le XML pour récupérer les titres des mesures
    				for each(var nodeTitreMesures:XML in noeuds..object) {
     
    					if( nodeTitreMesures.parent().string == "Programme Source") {
    						for each(var mesure:XML in nodeTitreMesures..string) {
    							mesures[index]=mesure;
    							index++;
    						}
    					}
    				}
     
     
    				//on parcourt une deuxieme fois le XML pour créer le tableau des données
    				for each(var nodeTitre:XML in noeuds..object)
    				{
    					if( nodeTitre.parent().string != "Programme Source") {
     
    						var indexValeur:int =0;
    						var data:ArrayCollection =  new ArrayCollection();
    						for each(var valeur:XML in nodeTitre..string) {
    							var content:Object;
     
    							//Object de type {Measure: "type de mesure", Measurement: valeur(int)}
    							content = {Measure: mesures[indexValeur]  ,Measurement: valeur};
    							data.addItem(content);
    							indexValeur++;
    						}
    		                serieCollection.push(data);
    					}
    				}
    		}
     
    		public function getResult():Array {
    			return serieCollection;
    		}
    	}
    }

  11. #11
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    déjà ceci n'est pas correct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [Bindable]
    		private var profit04:ArrayCollection = new 	ArrayCollection([{Month: "", Profit: 1}]);
    tu créés l'instance en dehors de toutes méthodes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [Bindable]
    private var profit04:ArrayCollection;
     
    private function toto():void{
     profit04 = new ArrayCollection([{Month: "", Profit: 1}]);
    }
    je précise cela meme si j'ai vu que dans ton code plus loin tu l'as bien mis en place correctement

    ensuite revoi le chargement de ton XML, vérifie qu'il est bien chargé dans ta variable serieCollection! passe en pas à pas(mode debug) pour valider ceci.

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  12. #12
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 31
    Points
    31
    Par défaut
    dans mon code actuel la variable serieCollection est initialisée après que le graphique soit créer, quand je fais des traces en dehors de la méthode chargementComplet la variable est null bien qu'elle ai bien été initialisée dans chargementComplet (on le voit dans le debugger quand on met un point d'arrêt)

  13. #13
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    utilise les events sur ton XMLLoader pour charger proprement ton XML

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  14. #14
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 31
    Points
    31
    Par défaut
    fait et ça ne change rien

  15. #15
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    peux tu poster tout ton code qui prend en compte toutes les remarques, s'il te plait?

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  16. #16
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 31
    Points
    31
    Par défaut
    oui bien sur

    le fichier mxml :
    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
     
    <?xml version="1.0"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp();" viewSourceURL="srcview/index.html">
    	<mx:Script><![CDATA[
    		import mx.charts.series.BarSeries;
    		import mx.charts.DateTimeAxis;
    		import mx.charts.series.LineSeries;
    		import mx.charts.CategoryAxis;
    		import mx.charts.Legend;
    		import mx.charts.series.ColumnSeries;
    		import mx.collections.ArrayCollection;
     
    		[Bindable]
    		private var serieCollection:Array;
     
    		private function initApp():void {
    			var currentSeries:Array =  new Array();
    			var series:ColumnSeries;
     
    			var xml:XMLLoader = new XMLLoader("D:/test.xml");
    			serieCollection = xml.getResult();
    			trace(serieCollection);
     
    			for each ( var se:ArrayCollection in serieCollection ) {
    				series = new ColumnSeries();
    				series.dataProvider = se;
    				series.yField = "Measurement";
    				series.xField = "Measure";
    				series.displayName = "toto";
    				currentSeries.push(series);	
    			}
    			myChart.series = currentSeries;
    		}
    	]]></mx:Script>
    	<mx:Panel title="Column Chart">
    		<mx:ColumnChart id="myChart" dataProvider="{myChart}" showDataTips="true">
    			<mx:horizontalAxis>
    				<mx:CategoryAxis categoryField="Month"/>
    			</mx:horizontalAxis>
    		</mx:ColumnChart>
    		<mx:Legend dataProvider="{myChart}"/>
    	</mx:Panel>
    </mx:Application>
    la classe as3
    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
    package
    {
    	import flash.display.Sprite;
    	import flash.events.Event;
    	import flash.net.URLLoader;
    	import flash.net.URLRequest;
     
    	import mx.collections.ArrayCollection;
    	import mx.rpc.soap.LoadEvent;
     
    	public class XMLLoader extends Sprite
    	{
    		private var chargementXML:URLLoader;
    		private var serieCollection:Array; //tableau contenant les données pour le barchart
    		private var xml:XML;		
     
    		public function XMLLoader(url:String)
    		{
    			chargementXML = new URLLoader();
     
    			try {
    				var fichier:URLRequest = new URLRequest(url);// le fichier xml		
    				chargementXML.load( fichier );
    			}
    			catch (error:Error) {
    				trace(error);
    			}
     
    			addEventListener( Event.COMPLETE, chargementComplet );
    		}
     
     
            //quand le fichier xml est chargé 
    		private function chargementComplet(pEvt:Event):void { 
    				xml = new XML( pEvt.target.data ); //création de l'objet XML
    				var noeuds:XMLList = xml.elements(); 
     
    				var mesures:Array = new Array(); //tableau contenant tous les titres des mesures
    				var index:int = 0;
     
    				serieCollection = new Array();
     
    				//on parcourt une premiere fois le XML pour récupérer les titres des mesures
    				for each(var nodeTitreMesures:XML in noeuds..object) {
     
    					if( nodeTitreMesures.parent().string == "Programme Source") {
    						for each(var mesure:XML in nodeTitreMesures..string) {
    							mesures[index]=mesure;
    							index++;
    						}
    					}
    				}
     
    				var tabTemp:Array = new Array()
    				//on parcourt une deuxieme fois le XML pour créer le tableau des données
    				for each(var nodeTitre:XML in noeuds..object)
    				{
    					if( nodeTitre.parent().string != "Programme Source") {
     
    						var indexValeur:int =0;
    						var data:ArrayCollection =  new ArrayCollection();
    						for each(var valeur:XML in nodeTitre..string) {
    							var content:Object;
     
    							//Object de type {Measure: "type de mesure", Measurement: valeur(int)}
    							content = {Measure: mesures[indexValeur]  ,Measurement: valeur};
    							data.addItem(content);
    							indexValeur++;
    						}
    		                tabTemp.push(data);
    					}
    				}
     
    				serieCollection = new Array(tabTemp);
    		}
     
    		public function getResult():Array {
    			return serieCollection;
    		}
    	}
    }

  17. #17
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    tu appelles xml.getResult avant même que le résultat ne soit arrivé
    tu fais appel a ton loader et directement tu tente de récupérer le résultat, ton appel à getResult() arrive avant l'event Event.COMPLETE sur ton URLLoader a coup sur, du coup on te retourne un objet null

    il est la ton problème, suffit de bien séquencer les choses

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  18. #18
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par Jim_Nastiq Voir le message
    tu appelles xml.getResult avant même que le résultat ne soit arrivé
    tu fais appel a ton loader et directement tu tente de récupérer le résultat, ton appel à getResult() arrive avant l'event Event.COMPLETE sur ton URLLoader a coup sur, du coup on te retourne un objet null

    il est la ton problème, suffit de bien séquencer les choses
    oui ça j'avais bien compris ce problème mais ce que je vois pas c'est comment faire pour attendre que l'event event.Complete soit passé *noob en as3 et en flex et voir même en flash ^^*

  19. #19
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    ta classe as3:

    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
    package
    {
    	import flash.display.Sprite;
    	import flash.events.Event;
    	import flash.net.URLLoader;
    	import flash.net.URLRequest;
    	
    	import mx.collections.ArrayCollection;
    	import mx.rpc.soap.LoadEvent;
    	
    	public class XMLLoader extends Sprite
    	{
    		public static const EVENT_COMPLETE:String = "eventComplete";
    		private var chargementXML:URLLoader;
    		private var serieCollection:Array; //tableau contenant les données pour le barchart
    		private var xml:XML;		
    		
    		public function XMLLoader(url:String)
    		{
    			chargementXML = new URLLoader();
    			
    			try {
    				var fichier:URLRequest = new URLRequest(url);// le fichier xml		
    				chargementXML.load( fichier );
    			}
    			catch (error:Error) {
    				trace(error);
    			}
    			
    			addEventListener( Event.COMPLETE, chargementComplet );
    		}
    
    		
            //quand le fichier xml est chargé 
    		private function chargementComplet(pEvt:Event):void { 
    				xml = new XML( pEvt.target.data ); //création de l'objet XML
    				var noeuds:XMLList = xml.elements(); 
    	
    				var mesures:Array = new Array(); //tableau contenant tous les titres des mesures
    				var index:int = 0;
    
    				serieCollection = new Array();
    				
    				//on parcourt une premiere fois le XML pour récupérer les titres des mesures
    				for each(var nodeTitreMesures:XML in noeuds..object) {
    					
    					if( nodeTitreMesures.parent().string == "Programme Source") {
    						for each(var mesure:XML in nodeTitreMesures..string) {
    							mesures[index]=mesure;
    							index++;
    						}
    					}
    				}
    
    				var tabTemp:Array = new Array()
    				//on parcourt une deuxieme fois le XML pour créer le tableau des données
    				for each(var nodeTitre:XML in noeuds..object)
    				{
    					if( nodeTitre.parent().string != "Programme Source") {
    					
    						var indexValeur:int =0;
    						var data:ArrayCollection =  new ArrayCollection();
    						for each(var valeur:XML in nodeTitre..string) {
    							var content:Object;
    							
    							//Object de type {Measure: "type de mesure", Measurement: valeur(int)}
    							content = {Measure: mesures[indexValeur]  ,Measurement: valeur};
    							data.addItem(content);
    							indexValeur++;
    						}
    		                tabTemp.push(data);
    					}
    				}
    				
    				serieCollection = new Array(tabTemp);
    				dispatch(new Event(EVENT_COMPLETE));
    		}
    		
    		public function getResult():Array {
    			return serieCollection;
    		}
    	}
    }
    ton code mxml:
    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
    <?xml version="1.0"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp();" viewSourceURL="srcview/index.html">
    	<mx:Script><![CDATA[
    		import mx.charts.series.BarSeries;
    		import mx.charts.DateTimeAxis;
    		import mx.charts.series.LineSeries;
    		import mx.charts.CategoryAxis;
    		import mx.charts.Legend;
    		import mx.charts.series.ColumnSeries;
    		import mx.collections.ArrayCollection;
    		
    		[Bindable]
    		private var serieCollection:Array;
    	
    		private function initApp():void {
    			var xml:XMLLoader = new XMLLoader("D:/test.xml");
    			xml.addEventListener(XMLLoader.EVENT_COMPLETE, onComplete);
    		}
    		
    		private function onComplete(evt:Event):void{
    			var currentSeries:Array =  new Array();
    			var series:ColumnSeries;
    
    			serieCollection = xml.getResult();
    			trace(serieCollection);
    			
    			for each ( var se:ArrayCollection in serieCollection ) {
    				series = new ColumnSeries();
    				series.dataProvider = se;
    				series.yField = "Measurement";
    				series.xField = "Measure";
    				series.displayName = "toto";
    				currentSeries.push(series);	
    			}
    			myChart.series = currentSeries;
    		}
    	]]></mx:Script>
    	<mx:Panel title="Column Chart">
    		<mx:ColumnChart id="myChart" dataProvider="{myChart}" showDataTips="true">
    			<mx:horizontalAxis>
    				<mx:CategoryAxis categoryField="Month"/>
    			</mx:horizontalAxis>
    		</mx:ColumnChart>
    		<mx:Legend dataProvider="{myChart}"/>
    	</mx:Panel>
    </mx:Application>

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  20. #20
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 31
    Points
    31
    Par défaut
    ok c'est nice je récupère bien l'objet
    Maintenant j'ai un autre soucis qui est qu'il ne veut toujours pas créer mon graphique. J'ai testé un truc sur un tuto que j'ai trouvé , j'ai tout simplement supprimé la source qui était au début pour ne laisser que les sources qu'on rajoute "à la volé" en cliquant sur le bouton : resultat.. il ne veut pas insérer les barres et je penses que j'ai le même problème

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/09/2009, 16h13
  2. Probleme de création d'une table avec les variant
    Par sebyo dans le forum Débuter
    Réponses: 2
    Dernier message: 28/04/2009, 22h01
  3. Probleme de Création d'une taglib
    Par aymenroma dans le forum JSF
    Réponses: 8
    Dernier message: 20/05/2008, 10h42
  4. SVP Probleme dans la création d'une table
    Par sephirothmana dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/11/2006, 17h12
  5. [VB.NET] Probleme de création d'une picturebox dans le code
    Par stringman62 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/02/2006, 16h56

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