0

在我的应用程序中,我有一个图表,我想在单击时显示在 TitleWindow 中。

        var win:TitleWindow = PopUpManager.createPopUp(this, TitleWindow, false) as TitleWindow;
        win.addChild(myChart);
        PopUpManager.bringToFront(win);

它确实将图表放在显示的标题窗口中,但它从父级中删除了原始图表。然后,当标题窗口关闭时,我的图表就消失了。我不知道如何克隆图表——我尝试过的所有方法都失败了——我不知道为什么会这样。

解决方案:

  public var barChart:BarChart;
  public function onClick(e:Object):void
  {
    barChart = (e as BarChart);
    if(barChart != null)
    {
        var win:MyWindow = PopUpManager.createPopUp(this, MyWindow, false) as MyWindow;
        PopUpManager.centerPopUp(win);

    }
  }

// ... MyWindow.mxml ...

var _parent:Object;
private function creationComplete(e:Event):void
{
    bChart = parentApplication.barChart;
    _parent = bChart.parent;
    this.addChild(bChart);
}

private function onMyWindowClose(evt:CloseEvent):void {
    _parent.addChild(bChart);
    PopUpManager.removePopUp(this);
}
4

2 回答 2

0

我还没有找到支持它的文档,但我相信 Flash UI 组件只能有一个父组件。当您调用 addChild() 时,我怀疑控件的父级发生了变化,并且它从另一个窗口中消失了。由于父系已更改,当新的 TitleWindow 消失时,它将被垃圾收集。

我想我会在你的位置上做的是将图表抽象到它自己的控件中,这样你就不必复制代码,在你的常规窗口和弹出窗口中使用相同的控件,然后将数据传递给它createPopUp 调用。

于 2009-12-21T08:08:34.693 回答
0

当您执行一个对象时addChild,该对象被重新设置为父对象,正如西蒙所说的那样,一个DisplayObject不能属于两个父级。如果在打开弹出窗口时没有同时看到两个图表不是问题,您可以在打开弹出窗口之前保存子父级和索引,并在关闭弹出窗口时恢复子状态。

打开前

myChartParent=myChart.parent;
myChartIndex=myChartParent.getChildIndex(myChart);

关闭时

myChartParent.addChildAt(myChartIndex);

但是,如果您想查看两个图表,则必须创建两个图表实例。

于 2009-12-21T08:35:28.353 回答