嘿伙计们,我在实现Factory方法时遇到了这个问题。 以下是主图表类的片段,它调用ChartFactory的方法来获得正确的对象。我键入Cast chartobject以便能够调用Show方法;我也对此感到担忧。
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);
以下是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.");
}
}
以下是几个Charts类型类之一的Show方法:AreaCharts,PieCharts等。所有这些类都实现了IChart接口。
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 :(得分:1)
我担心此代码存在多个问题。不幸的是,为什么你的图表没有出现是不明显的,所以你可以在下面应用一些建议并使用调试器来分析问题。
如果要在下一行中更改ChartBase
引用的值,则创建chartObject
实例没有意义
chartObject = new ChartBase();
chartObject = ChartFactory.CreateChartObject(chartType);
如果您的图表的API为IChart
,则您的工厂应返回IChart
而不是投放。
public static function CreateChartObject(subType:String):IChart
确保从工厂返回正确类的实例。即您要返回标准PieChart
的子类。通常,扩展类保持相同的名称并只更改包不是最好的主意。
如果您不确定程序是否输入了某些功能,请再次使用Flash Builder调试程序进行检查。没有调试器,我无法想象开发。
答案 1 :(得分:0)
一些想法:
你调用Show方法,传递一些对象,但在该方法中没有任何地方添加到displayObject。 Show究竟应该做什么?
您的类中的许多成员变量都以UpperCase开头。如果类的名称相同,编译器可以很容易地将这些与类名混淆。使用大写字母启动变量和函数名称的不良做法。
如果将实例转换为另一个类或接口失败,则会出现运行时错误。使用Flash Builder调试器很容易调试它们。
答案 2 :(得分:0)
嘿ppl .. 我发现了wat wnt wrng..as olwys it wa“I”。 我有一个习惯,就是将mkin模拟器从主项目中隐藏起来并整合它。所以在模拟中,我使用了一个xml,而且在主项目中使用了一个稍微不同的格式。 我有一个条件chk从prog返回如果某个值不匹配,n由于错误的xml我没有。 所以这更像是一个词汇错误,而不是一个逻辑错误。 抱歉n Thanx evryone回复。