我正在尝试在AS3中开发一个应用程序。我真正想实现的是只有一个数据网格,并让它显示,比如说,三组不同的数据。(实际计数将动态变化,这无关紧要,因为问题与此无关)是的,它必须只有一个数据网格,因为你知道,我需要一个紧凑的接口。
类";Sonuc";有三个属性,它们是构造函数输入的字符串版本。典型的";Sonuc";物体是这样的。
var sonuc1:Sonuc = new Sonuc(1,1,false);
//sonuc1.num = "1"
//sonuc1.type = "1"
//sonuc1.isTrue = "No"
我之所以通知你";Sonuc";课堂是我想让你知道,课堂并不是太复杂的东西。x.mxml是测试mxml,在这里我只加载用于测试目的的类。
这是我迄今为止编码的
public class ResultInterface extends UIComponent
{
private const desiredWidth:int = 250;
private const desiredHeight:int = 150;
private const sonuc1:Sonuc = new Sonuc(1,1,false);
public var tablo:DataGrid = new DataGrid();
public var kolonArray:Array = new Array ();
public var sonucArray:Array = new Array ();
public var currentIndex:int = new int ();
public var prevButon:Button = new Button();
public var nextButon:Button = new Button();
public function ResultInterface():void
{
currentIndex = 0;
super();
tablo = new DataGrid();
width=desiredWidth+40;
height=desiredHeight+60;
this.tablo.width = desiredWidth;
this.tablo.height = desiredHeight;
this.tablo.x = 20;
this.tablo.y = 40;
prevButon.x = 10;
prevButon.y = genislik/2 - 10;
prevButon.width =
prevButon.height = 10;
nextButon.x = genislik +20;
nextButon.y = genislik/2 -10;
nextButon.width =
nextButon.height = 10;
var referansColl:ArrayCollection = new ArrayCollection();
sonucArray.push(referansColl);
tablo.dataProvider = sonucArray[currentIndex];
var sampleCol:DataGridColumn = new DataGridColumn();
sampleCol.dataField = "num";
sampleCol.headerText = "Number";
var sampleCol2:DataGridColumn = new DataGridColumn();
sampleCol2.dataField = "type";
sampleCol2.headerText = "Type";
var sampleCol3:DataGridColumn = new DataGridColumn();
sampleCol3.dataField = "isTrue";
sampleCol3.headerText = "Is it true?";
kolonArray.push(sampleCol,sampleCol2,sampleCol3);
tablo.columns = kolonArray;
this.addElement(tablo); //**** this is the problematic line
this.addChild(oncekiButon);
this.addChild(sonrakiButon);
}
public function getNewSonuc(incoming:Sonuc):void
{
sonucArray[currentIndex].addItem(incoming);
}
public function newTablo():void
{
var newTablo:ArrayCollection = new ArrayCollection();
currentIndex = sonucArray.push(newTablo);
}
public function prev(evt:Event):void //I haven't written event listeners yet
{
if(currentIndex > 0)
currentIndex--;
nextButon.enabled = true;
if(currentIndex == 0)
prevButon.enabled = false;
}
public function birSonrakine(evt:Event):void
{
if(currentIndex < sonucArray.length)
currentIndex++;
prevButon.enabled = true;
if(currentIndex == sonucArray.length)
nextButon.enabled = false;
}
在这个版本中,我得到一个语法错误";调用可能未定义的方法addElement";我还尝试将基类设置为";"雪碧";以及";画布";
当我使用addChild而不是addElement时,我会得到运行时错误";addChild对此类不可用";
当我刚刚评论有问题的行out时,除了数据网格本身之外,所有内容都加载得很完美。
请注意,在将某些数据(Sonuc)发送到数据网格之前会发生错误。
当我尝试使用canvas和addelement时;无法访问null对象引用"的属性或方法;带有一些奇怪的函数、类和包。
1009:无法访问null对象引用的属性或方法
at mx.styles::StyleProtoChain$/initProtoChainForUIComponentStyleName()[E:dev4.yframeworksprojectsframeworksrcmxstylesStyleProtoChain.as:358]
at mx.styles::StyleProtoChain$/initProtoChain()[E:dev4.yframeworksprojectsframeworksrcmxstylesStyleProtoChain.as:171]
at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::initProtoChain()[E:dev4.yframeworksprojectsframeworksrcmxcoreUIComponent.as:10926]
at mx.core::UIComponent/regenerateStyleCache()[E:dev4.yframeworksprojectsframeworksrcmxcoreUIComponent.as:10989]
at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::addingChild()[E:dev4.yframeworksprojectsframeworksrcmxcoreUIComponent.as:7465]
at mx.core::UIComponent/addChild()[E:dev4.yframeworksprojectsframeworksrcmxcoreUIComponent.as:7162]
at mx.controls.listClasses::ListBase/createChildren()[E:dev4.yframeworksprojectsmxsrcmxcontrolslistClassesListBase.as:3772]
at mx.controls::DataGrid/createChildren()[E:dev4.yframeworksprojectsmxsrcmxcontrolsDataGrid.as:1143]
at mx.core::UIComponent/initialize()[E:dev4.yframeworksprojectsframeworksrcmxcoreUIComponent.as:7634]
at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::childAdded()[E:dev4.yframeworksprojectsframeworksrcmxcoreUIComponent.as:7495]
at mx.core::Container/http://www.adobe.com/2006/flex/mx/internal::childAdded()[E:dev4.yframeworksprojectsmxsrcmxcoreContainer.as:3974]
at mx.core::Container/addChildAt()[E:dev4.yframeworksprojectsmxsrcmxcoreContainer.as:2618]
at mx.core::Container/addChild()[E:dev4.yframeworksprojectsmxsrcmxcoreContainer.as:2534]
at mx.core::Container/addElement()[E:dev4.yframeworksprojectsmxsrcmxcoreContainer.as:2981]
at genel.siniflar::ResultInterfaceArayuz()[C:UsersEgeAdobe Flash Builderbrainswift2srcgenelsiniflarResultInterface.as:95]
at x()[C:UsersEgeAdobe Flash Builderbrainswift2srcx.mxml:27]
at _x_mx_managers_SystemManager/create()[_x_mx_managers_SystemManager.as:54]
at mx.managers.systemClasses::ChildManager/initializeTopLevelWindow()[E:dev4.yframeworksprojectsframeworksrcmxmanagerssystemClassesChildManager.as:311]
at mx.managers::SystemManager/initializeTopLevelWindow()[E:dev4.yframeworksprojectsframeworksrcmxmanagersSystemManager.as:3057]
at mx.managers::SystemManager/http://www.adobe.com/2006/flex/mx/internal::kickOff()[E:dev4.yframeworksprojectsframeworksrcmxmanagersSystemManager.as:2843]
at mx.managers::SystemManager/http://www.adobe.com/2006/flex/mx/internal::preloader_completeHandler()[E:dev4.yframeworksprojectsframeworksrcmxmanagersSystemManager.as:2723]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.preloaders::Preloader/timerHandler()[E:dev4.yframeworksprojectsframeworksrcmxpreloadersPreloader.as:542]
at flash.utils::Timer/_timerDispatch()
at flash.utils::Timer/tick()
我真的需要你的帮助,伙计们,请尽快回答。
好吧,我试着从构造函数外部调用"addElement",它成功了。然而,我不知道是什么原因导致了这个错误,我知道我的解决方案不是合法的。我想学习解决这个问题的正确方法。
更改resultInterface.as
// this.addElement(tablo); **** this is the problematic line, we have commented it out
this.addChild(oncekiButon);
this.addChild(sonrakiButon);
更改为x.mxml
public function onCreationComplete(evt:Event):void
{
showResult.addElement(showResult.tablo);
addElement(showResult);
}