Apache Adobe Flex TutorialTutoriaux Adobe Flex & AIR en Français

25fév/093

Flex Chart – Créer des Charts en ActionScript

Vous pouvez créer, détruire et manipuler les charts Flex en utilisant de l'ActionScript, comme vous le feriez pour tout autre composant Flex.
Quand on travaille avec des blocs Script ou dans des fichiers classe séparés, il vous faudra être bien sûr d'importer les classes appropriées. Voici les imports définis dans la plupart des cas, à vous bien sûr de les adapter pour seulement importer les classes dont vous avez besoin.

import mx.collections.*;
import mx.charts.*;
import mx.charts.series.*;
import mx.charts.renderers.*;
import mx.charts.events.*;

Pour créer un chart en AS3, utilisez simplement le mot-clé "new". Vous pouvez ensuite fixer les propriétés de l'objet Chart comme vous le feriez en MXML. Pour assigner un data provider, utilisez la propriété "dataProvider". Vous devrez ensuite ajouter une nouvelle series à votre Chart. Pour cela, faîtes un "new" sur la classe de series correspondante. Pour appliquer cette series à votre Chart, utilisez la propriété "series".

Notez que la propriété series est de type Array car un Chart peut contenir plusieurs series. Pour ajouter une series, faîtes un push() et pas une assignation directe.


L'exemple suivant définit un composant BarChart avec 2 series:

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
	creationComplete="init()">
	<mx:Script><![CDATA[

		import mx.collections.ArrayCollection;
		import mx.charts.BarChart;
		import mx.charts.series.BarSeries;
		import mx.charts.CategoryAxis;
		import mx.charts.Legend;

		[Bindable]
		public var expenses:ArrayCollection = new ArrayCollection([
			{Month:"Jan", Profit:2000, Expenses:1500},
			{Month:"Feb", Profit:1000, Expenses:200},
			{Month:"Mar", Profit:1500, Expenses:500}
		]);

		public var myChart:BarChart;
		public var series1:BarSeries;
		public var series2:BarSeries;
		public var legend1:Legend;

		public function init():void {
			// Créer un objet Chart et lui assigner des propriétés de base
			myChart = new BarChart();
			myChart.showDataTips = true;
			myChart.dataProvider = expenses;
			// Définir les axes (type CategoryAxis).
			var vAxis:CategoryAxis = new CategoryAxis();
			vAxis.categoryField = "Month" ;
			vAxis.dataProvider = expenses;
			myChart.verticalAxis = vAxis;
			// Ajouter les series.
			var mySeries:Array=new Array();
			series1 = new BarSeries();
			series1.xField="Profit";
			series1.yField="Month";
			series1.displayName = "Profit";
			mySeries.push(series1);
			series2 = new BarSeries();
			series2.xField="Expenses";
			series2.yField="Month";
			series2.displayName = "Expenses";
			mySeries.push(series2);
			myChart.series = mySeries;
			// Créer une légende.
			legend1 = new Legend();
			legend1.dataProvider = myChart;
			// Ajouter le Chart et la Légende à la liste d'affichage
			p1.addChild(myChart);
			p1.addChild(legend1);
		}
	]]></mx:Script>
	<mx:Panel id="p1" title="BarChart crée en AS3"/>
</mx:Application>

Flex Source Code Download: Télécharger le code source complet de l'application

This movie requires Flash Player 11

Articles similaires

Commentaires (3) Trackbacks (2)
  1. Bonjour

    J'ai une question sur l'update du dataprovider car çà ne semble pas réagir
    pareil en AS3 ou alors il manque quelque chose dans l'exemple.
    Sur celui-ci, j'ai rajouté le même BarChart codé en mxml. Il utilise
    le même dataprovider que le barchart AS3. J'ai aussi rajouté un bouton
    qui change le dataprovider lorsqu'on clique dessus.

    Résultats : quand on clique sur le bouton, le BarChart mxml se met à jour mais
    pas le BarChart AS3.
    Est-ce que vous pouvez m'expliquer pourquoi ? merci.

  2. Salut,

    Je pense qu'il faut que tu fasses un refresh() sur ton arrayCollection (dataProvider) après modification afin que la MAJ se fasse. C'est automatique grâce au data binding du MXML. A mon avis cela vient de là :)

    Fabien

  3. Le refresh ne marche pas mais j'ai trouvé la solution et
    c'était bien un problème de binding.

    Il faut affecter le dataProvider au chart en utilisant la classe
    BindingUtils :

    MXML:
    1. <?xml version="1.0"?>
    2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    3.        creationComplete="init()">
    4.        <mx:Script><![CDATA[
    5.  
    6.                import mx.collections.ArrayCollection;
    7.                import mx.charts.BarChart;
    8.                import mx.charts.series.BarSeries;
    9.                import mx.charts.CategoryAxis;
    10.                import mx.charts.Legend;
    11.                import mx.binding.utils.BindingUtils;
    12.  
    13.                [Bindable]
    14.                public var expenses:ArrayCollection = new ArrayCollection([
    15.                        {Month:"Jan", Profit:2000, Expenses:1500},
    16.                        {Month:"Feb", Profit:1000, Expenses:200},
    17.                        {Month:"Mar", Profit:1500, Expenses:500}
    18.                ]);
    19.  
    20.                [Bindable]
    21.                public var expenses2:ArrayCollection = new ArrayCollection([
    22.                        {Month:"Jan", Profit:4000, Expenses:1000},
    23.                        {Month:"Feb", Profit:4000, Expenses:1000},
    24.                        {Month:"Mar", Profit:4500, Expenses:1250}
    25.                ]);
    26.  
    27.                public var myChart:BarChart;
    28.                public var series1:BarSeries;
    29.                public var series2:BarSeries;
    30.                public var legend1:Legend;
    31.  
    32.                public function init():void {
    33.                        // Créer un objet Chart et lui assigner des propriétés de base
    34.                        myChart = new BarChart();
    35.                        myChart.showDataTips = true;
    36.                        //myChart.dataProvider = expenses;
    37.                        BindingUtils.bindProperty(myChart,"dataProvider", this, "expenses");
    38.                        // Définir les axes (type CategoryAxis).
    39.                        var vAxis:CategoryAxis = new CategoryAxis();
    40.                        vAxis.categoryField = "Month" ;
    41.                        vAxis.dataProvider = expenses;
    42.                        myChart.verticalAxis = vAxis;
    43.                        // Ajouter les series.
    44.                        var mySeries:Array=new Array();
    45.                        series1 = new BarSeries();
    46.                        series1.xField="Profit";
    47.                        series1.yField="Month";
    48.                        series1.displayName = "Profit";
    49.                        mySeries.push(series1);
    50.                        series2 = new BarSeries();
    51.                        series2.xField="Expenses";
    52.                        series2.yField="Month";
    53.                        series2.displayName = "Expenses";
    54.                        mySeries.push(series2);
    55.                        myChart.series = mySeries;
    56.                        // Créer une légende.
    57.                        legend1 = new Legend();
    58.                        legend1.dataProvider = myChart;
    59.                        // Ajouter le Chart et la Légende à la liste d'affichage
    60.                        p1.addChild(myChart);
    61.                        p1.addChild(legend1);
    62.                }
    63.  
    64.                public function changeData():void {
    65.                        expenses = expenses2 ;
    66.                        expenses.refresh();
    67.                }
    68.  
    69.        ]]></mx:Script>
    70.        <mx:Button label="changeData" click="changeData()" id="buttonPrint"/>
    71.        <mx:Panel id="p1" title="BarChart crée en AS3"/>
    72.  
    73.        <mx:Panel title="Bar Chart">
    74.                <mx:BarChart id="testBarChart" showDataTips="true" dataProvider="{expenses}">
    75.                        <mx:verticalAxis>
    76.                                <mx:CategoryAxis categoryField="Month"/>
    77.                        </mx:verticalAxis>
    78.                        <mx:series>
    79.                                <mx:BarSeries xField="Profit" yField="Month" displayName="Profit"/>
    80.                                <mx:BarSeries xField="Expenses" yField="Month" displayName="Expenses"/>
    81.                        </mx:series>
    82.                </mx:BarChart>
    83.                <mx:Legend dataProvider="{testBarChart}"/>
    84.        </mx:Panel>
    85. </mx:Application>


Leave a comment

(required)