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

28avr/093

Flex Chart – Ajouter des Series à la volée en ActionScript

Dans l'exemple précédent sur les Charts Flex, on a crée un Chart en remplaçant les series existantes.
Dans cet exemple, on va créer 2 ColumnSeries et leur assigner un data provider. On va ensuite créer un Array qui va contenir les Series existantes, et rajouter (push) de nouvelles séries à cet Array.
Enfin, on va assigner la propriété "series" du Chart à ce nouvel Array de Series:

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

		import mx.collections.ArrayCollection;
		import mx.charts.series.ColumnSeries;

		[Bindable]
		private var profit04:ArrayCollection = new ArrayCollection([
			{Month: "Jan", Profit: 2000},
			{Month: "Feb", Profit: 1000},
			{Month: "Mar", Profit: 1500}
		]);

		[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}
		]);

		private var series1:ColumnSeries;
		private var series2:ColumnSeries;

		private function addMoreSeries():void {
			if (!series1 || !series2) {
				series1 = new ColumnSeries();
				series1.dataProvider = profit05;
				series1.yField = "Profit";
				series1.xField = "Month";
				series1.displayName = "2005";
				series2 = new ColumnSeries();
				series2.dataProvider = profit06;
				series2.yField = "Profit";
				series2.xField = "Month";
				series2.displayName = "2006";
				var currentSeries:Array = myChart.series;
				currentSeries.push(series1);
				currentSeries.push(series2);
				myChart.series = currentSeries;
			}
		}
		private function resetApp():void {
			myChart.series = [ series0 ];
			series1 = null;
			series2 = null;
		}
	]]></mx:Script>
	<mx:Panel title="Column Chart">
		<mx:ColumnChart id="myChart" dataProvider="{profit04}" showDataTips="true">
			<mx:horizontalAxis>
				<mx:CategoryAxis categoryField="Month"/>
			</mx:horizontalAxis>
			<mx:series>
				<mx:ColumnSeries dataProvider="{profit04}"
				id="series0"
				yField="Profit"
				xField="Month"
				displayName="2004"
				/>
			</mx:series>
		</mx:ColumnChart>
		<mx:Legend dataProvider="{myChart}"/>
	</mx:Panel>
	<mx:HBox>
		<mx:Button id="b1" label="Ajouter de nouvelles Series" click="addMoreSeries()"/>
		<mx:Button id="b2" label="RAZ" click="resetApp()"/>
	</mx:HBox>
</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 (0)
  1. bonjour, tout d'abord merci pour ces tutoriels qui m'aident beaucoup pour mon stage.
    j'aurais une question à propos du code suivant:

    Actionscript:
    1. private var profit04:ArrayCollection = new ArrayCollection([
    2.             {Month: "Jan", Profit: 2000},
    3.             {Month: "Feb", Profit: 1000},
    4.             {Month: "Mar", Profit: 1500}
    5.         ]);

    Dans l'ArrayCollection, vous mettez des

    Actionscript:
    1. {Mont: "bidule", Profit: 1}

    !!
    De quel type sont ces objets? Etant donné que je dois créer des données à partir d'un fichier xml (qui provient d'une sérialisation d'une hashmap Java) je ne peux pas les créer comme vous le faite et je ne peux pas non plus le faire comme vous le faites dans votre tutoriel sur les données xml et les charts.

    merci d'avance.

  2. Ces objets sont du type le plus basique c'est à dire Object ( la notation {} est équivalente à "new Object"). Month et Profit sont des propriétés de cet objet. "Bidule" et 1 sont les valeur correspondantes.
    Tu peux utiliser des Object comme ceci ou bien créer ta propre classe (model) avec ses propriétés public, ce qui est plus propre :)

    Fabien

  3. bonjour,
    tout d'abord merci pour cette réponse. Ensuite, pourrais je vous "embêtez" un petit peu plus car j'ai un problème avec mon projet Flex ? (par mail ça serait plus commode notamment pour ne pas polluer ces commentaires avec un trop plein de code). Si vous pouviez me répondre par mail, ça serait sympa.

    Merci d'avance.


Leave a comment

(required)

Aucun trackbacks pour l'instant