ActionScriptだけでUIを作る
MXMLを使わずに、ActionScriptだけでUIを作ることもできます。作り方は次のとおり。
- メインクラスを作る。このクラスは「flash.display.Sprite」を継承させる。
- メインクラスのコンストラクタで貼り付けるUIコンポーネントを生成。
- 作成したUIコンポーネントを貼り付ける。
単純なサンプル(ASOnly.as):
package { import flash.display.*; import flash.text.*; /** * メインクラス * flash.display.Spriteを継承する。 */ public class ASOnly extends Sprite { /** * コンストラクタ */ public function ASOnly() { // UIコンポーネントを生成 var label:TextField=new TextField(); label.text="Hello World!"; addChild(label); // 貼り付ける } } }
SWFへのコンパイルにはmxmlcを利用します。以下のようにasファイルを引数としてmxmlcを実行します。
mxmlc ASOnly.as
このとき、asファイルと同じディレクトリに「ASOnly-config.xml」を配置しておけば、コンパイルの設定ファイルとしてロードしてくれます。(Flexのコンパイル時と同じ)
はまり道
以下の問題は未解決です。まだまだなぞは多い。
Spriteを継承しない
Spriteを継承しなくてもいけるんでは!?と思って次のようにしてみましたが、何も表示されません。(コンパイルは通る。)
package { import flash.display.*; import flash.text.*; /** * メインクラス */ public class ASOnly { /** * コンストラクタ */ public function ASOnly() { var stage:Sprite = new Sprite(); var textField:TextField=new TextField(); textField.text="Hello World!"; stage.addChild(textField); } } }
TextArea
TextFieldをTextAreaに変えてみたのですが、こちらも動作しません。このほか、Flexで使えていた「Label」や「Button」もことごとくダメ。
package { import flash.display.*; import flash.text.*; import mx.controls.*; /** * メインクラス * flash.display.Spriteを継承する。 */ public class ASOnly extends Sprite { /** * コンストラクタ */ public function ASOnly() { var label:TextArea=new TextArea(); label.text="Hello World!"; addChild(label); // 貼り付ける } } }