0

Hé les gars, j'ai eu ce problème en implémentant la méthode Factory. Voici l'extrait de la classe de graphique principale qui appelle la méthode ChartFactory pour atteindre l'objet approprié. Je tape Cast chartobject de manière à pouvoir appeler la méthode Show, je suis également inquiet à ce sujet.Implémentation de la méthode d'usine dans actionscript

 container = new VBox(); 
     container.percentWidth = 100; 
     container.percentHeight = 100; 
     super.media.addChild(container); 

     chartObject = new ChartBase(); 
     chartObject = ChartFactory.CreateChartObject(chartType); 
     IChart(chartObject).Show(o); 
     container.addChild(chartObject); 

     legend = new Legend(); 
     legend.dataProvider = IChart(chartObject); 
     container.addChild(legend); 

Voici l'extrait de la méthode de ChartFactory:

public static function CreateChartObject(subType:String):ChartBase 
    { 
     switch(subType) 
     { 
      case ChartFactory.AREA_CHART: 
       return new AreaCharts(); 
       break; 

      case ChartFactory.COLUMN_CHART: 
       return new ColumnCharts(); 
       break; 

      case ChartFactory.PIE_CHART: 
       return new PieCharts(); 
       break; 

      default: 
       throw new ArgumentError(subType + ": Chart type is not recognized."); 
     } 
    } 

Et voici Afficher la méthode de l'une des plusieurs classes de type Graphiques: AreaCharts, PieCharts etc. Tout ce qui met en œuvre iChart Interface.

public function Show(o:ObjectProxy):void 
    { 
     var grids:GridLines; 
     var stroke:SolidColorStroke; 
     var horizontalAxis:CategoryAxis; 
     var verticalAxis:LinearAxis; 
     var horizontalAxisRenderer:AxisRenderer; 
     var verticalAxisRenderer:AxisRenderer; 

     grids = new GridLines(); 

     if(WidgetStylesheet.instance.LineChart_ShowGrid) 
      grids.setStyle("gridDirection", "both"); 
     else 
      grids.setStyle("gridDirection", ""); 

     stroke = new SolidColorStroke(WidgetStylesheet.instance.LineChart_GridLineColor, WidgetStylesheet.instance.LineChart_GridLineThickness); 
     grids.setStyle("horizontalStroke", stroke); 
     grids.setStyle("verticalStroke", stroke); 

     horizontalAxis = new CategoryAxis(); 
     horizontalAxis.categoryField = o.LargeUrl.Chart.xField; 
     horizontalAxis.title = o.LargeUrl.Chart.xAxisTitle.toString(); 
     verticalAxis = new LinearAxis(); 
     verticalAxis.title = o.LargeUrl.Chart.yAxisTitle.toString(); 

     horizontalAxisRenderer = new AxisRenderer(); 
     horizontalAxisRenderer.axis = horizontalAxis; 
     horizontalAxisRenderer.setStyle("tickLength", 0); 
     horizontalAxisRenderer.setStyle("showLine", false); 
     horizontalAxisRenderer.setStyle("showLabels", true); 
     horizontalAxisRenderer.setStyle("fontSize", WidgetStylesheet.instance.ComputeChartAxisFontSize(o.HeadlineFontSize)); 
     verticalAxisRenderer = new AxisRenderer(); 
     verticalAxisRenderer.axis = verticalAxis; 
     verticalAxisRenderer.setStyle("tickLength", 0); 
     verticalAxisRenderer.setStyle("showLine", false); 
     verticalAxisRenderer.setStyle("fontSize", WidgetStylesheet.instance.ComputeChartAxisFontSize(o.HeadlineFontSize)); 

     this.series = this.m_createSeries(o); 
     this.horizontalAxis = horizontalAxis; 
     this.horizontalAxisRenderers = [horizontalAxisRenderer]; 
     this.verticalAxis = verticalAxis; 
     this.verticalAxisRenderers = [verticalAxisRenderer]; 
     this.backgroundElements = [grids]; 
    } 
+0

Alors, quelle est la question que vous voulez poser? C'est un peu de code à jeter à quelqu'un d'aller chercher des problèmes. – frankhermes

+0

Le graphique n'apparaît pas .. l'objet est correctement instancié, mais je m'inquiète de l'appel de la méthode Show et du typecasting. –

+0

Qu'est-ce que c'est censé faire? chartObject = new ChartBase(); chartObject = ChartFactory.CreateChartObject (chartType); – hooleyhoop

Répondre

0

Hey ppl .. j'ai découvert wrng..as wat Wnt olwys il wa "I". J'ai l'habitude de faire des maquettes à l'écart du projet principal et de l'intégrer. Donc, en maquette, j'ai utilisé un fichier xml dont le format est légèrement différent de celui utilisé dans le projet principal. N i hd un chk conditionnel pour revenir du prog si certaine valeur ne correspond pas, n en raison de xml défectueux je did'nt. Il s'agit donc plus d'une erreur lexicale que logique. Désolé n Thanx evryone de répondre.

1

Je crains qu'il y ait plus d'un problème avec ce code. Malheureusement, la raison pour laquelle votre graphique n'apparaît pas n'est pas évidente. Vous pouvez donc appliquer certains des conseils ci-dessous et utiliser le débogueur pour analyser le problème.

  1. Il est inutile de créer ChartBase exemple, si vous allez changer la valeur de chartObject référence dans la ligne suivante

    chartObject = new ChartBase(); 
    chartObject = ChartFactory.CreateChartObject(chartType); 
    
  2. Si l'API de vos cartes est IChart votre usine doit retourner IChart au lieu de lancer.

    public static function CreateChartObject(subType:String):IChart 
    
  3. Assurez-vous de renvoyer les instances de la classe correcte en usine. c'est-à-dire que vous renvoyez votre sous-classe de la norme PieChart. Généralement ce n'est pas la meilleure idée d'étendre la classe en gardant le même nom et en changeant simplement le paquet. Une fois de plus, si vous n'êtes pas sûr que le programme entre dans une fonction, utilisez le débogueur de Flash Builder pour le vérifier. Je ne peux pas imaginer le développement sans débogueur.

+0

Merci pour la réponse banas mais j'ai essayé doin vieilles choses que vous avez suggéré .. que le travail de doest .. !! –

+0

Que voulez-vous dire par "ça ne marche pas"? Le débogueur fonctionne correctement dans Flash Builder. Je vous suggère de définir un point de rupture juste avant que vous obteniez l'objet de l'usine, et juste le franchir pour vérifier que toutes les valeurs sont ce qu'elles devraient être. Voici une ressource sur le fonctionnement du débogueur: http://help.adobe.com/en_US/flashbuilder/using/WS6f97d7caa66ef6eb1e63e3d11b6c4d0d21-7f07.html – Tjofras

+0

Merci pour la réponse mec .. le "ça ne marche pas" signifiait que smthng smwr était Cela empêchera la sortie. merci pour le lien .. et debggr no i gt rien..thts wat md moi appeler fo hlp !! –

0

Quelques réflexions:

  • vous appelez la méthode Show, il passe un objet, mais nulle part dans cette méthode est un enfant ajouté à un displayObject. Qu'est-ce que le Show est censé faire exactement?

  • Beaucoup de variables membres dans vos classes commencent par UpperCase. Le compilateur peut facilement confondre ceux avec des noms de classe, dans le cas où vos classes sont nommées pareil. Mauvaise pratique pour démarrer les noms de variables et de fonctions avec des majuscules. Si vous lancez une instance vers une autre classe ou interface échoue, vous obtiendrez une erreur d'exécution. Ceux-ci sont faciles à déboguer en utilisant le débogueur de Flash Builder.

+0

frankhermesthanx pour répondre ... le programme a fonctionné nw. Je dessine des choses dans l'objet par callin show method..dn j'ajoute l'objet (chartObject) directement dans un conteneur. N le casting était de type fyn aussi .. –

Questions connexes