Tips: GUI関連
複数のウィンドウを表示する
AIRのアプリケーションで複数のウィンドウを表示するアプリケーションの作り方を解説します。わかってしまえば、何てことは無いが、ポイントは作ったWindowオブジェクトはどこにもaddChildする必要は無く、単にWindow.open()を呼べば良いだけなのであった...
WindowオブジェクトをどうやってApplicationにaddChildすれば良いのか延々と悩んでしまったYo!
他に注意すべき点としては、
- 一旦Window.close()すると、再度Window.open()しても表示されない(のでオブジェクトを作り直す)
- Window.open()する前にWindow.closedを呼ぶとランタイムエラーが発生する(のでWindow.initializedで調べておく)
これさえ、気をつければ他に何も難しいことはありません。以下、サンプルソースです。
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();
}