Tips: GUI関連


複数のウィンドウを表示する

AIRのアプリケーションで複数のウィンドウを表示するアプリケーションの作り方を解説します。

わかってしまえば、何てことは無いが、ポイントは作ったWindowオブジェクトはどこにもaddChildする必要は無く、単にWindow.open()を呼べば良いだけなのであった...

WindowオブジェクトをどうやってApplicationにaddChildすれば良いのか延々と悩んでしまったYo!

他に注意すべき点としては、 です。

これさえ、気をつければ他に何も難しいことはありません。以下、サンプルソースです。

MultiWindow.mxml:
  <?xml version="1.0" encoding="utf-8"?>
  <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
      layout="absolute" applicationComplete="init()">
      <mx:Script source="MultiWindow.as"/>
      <mx:Button x="10" y="10" label="open" click="openChild(event)" />
  </mx:WindowedApplication>

MultiWindow.as:
  import mx.core.Window;
  import mx.controls.Button;
  import mx.containers.Canvas;

  private var win1:Window = null;
  private function init():void {
      win1 = new Window();
      win1.width = 300; win1.height = 200;
      win1.title = "Child Window";
      var canvas:Canvas = new Canvas();
      canvas.percentWidth = 100; canvas.percentHeight = 100;
      var btn:Button = new Button();
      btn.x = 10; btn.y = 10; btn.label = "close";
      btn.addEventListener(MouseEvent.CLICK, closeChild);
      canvas.addChild(btn);
      win1.addChild(canvas);
  }
      
  private function activateChild():void {
      win1.open(true);
      win1.move(this.nativeWindow.x + 10, this.nativeWindow.y + 10);
  }

  private function openChild(event:MouseEvent):void {
      if (win1.initialized)
      if (win1.closed)
          init();
      activateChild();
  }

  private function closeChild(event:MouseEvent):void {
      win1.close();
  }