ActionScriptを記述する -Javaとの比較-
では、先ほど作ったSubmitWindowを表示してみたいと思います。
スクリプトは以下の様になります。
<mx:Script><![CDATA[ import mx.managers.*; function openSubmitWindow():Void { var popUp:TitleWindow; popUp = SubmitWindow(PopUpManager.createPopUp(this,SubmitWindow,true)); } ]]></mx:Script>
かりにこれをJavaで書いたらどうなるでしょうか??(もちろん書けませんけど、Javaに翻訳したら・・・)
import mx.managers.*; public void openSubmitWindow() { TitleWindow popUp; popUp = (SubmitWindow)(PopUpManager.createPopUp(this,SubmitWindow.class,true)); }
・・・どうでしょうか??
まず、変数の宣言には必ずvarをつけてください。慣れないうちは、これをしょっちゅう忘れます。
変数のクラス宣言はしてもしなくてもOKなんですが、なるべく付ける方にした方がよろしいかと・・
var popUp; //これでもOK
メソッド(関数)の表記方法はfunctionを付けて、戻り値は : Void の様に書きます。戻り値が無い場合は省略も可能です。たとえ戻り値が無くてもVoidとした方がよいかと・・・
function openSubmitWindow() { //これでもOK }
それから、openSubmitWindow()メソッドの2行目では、PopUpManagerにcreatePopUpさせたものをSubmitWindowクラスにキャストしています。
キャストの書き方は
Class (object)
です。Javaなら
(Class) object
ですね。
あとの細かい所で言えば、Javaで言う所の「Object.class」は単に「Object」と書くとか、「this」なんていうオブジェクト参照も使用する事が出来るなんてことが解りました。
ちなみにcreatePopUp()の引数は、1番目が親ウインドウへの参照(この場合はアプリケーションそのものなので、thisでよい)、2番目は表示するクラス、3番目はモーダルにするかしないか?です。
ここで、2番目の引数は「表示するクラス」とサラッと書きましたが、じつはここに密かなオブジェクト指向が隠されています。(たぶん)
先ほどSubmitWindow.mxmlはかならずこの「ファイル名」にしてくれと書きました。
SubmitWindow.mxmlのXMLの最初の子要素は
です。このように書かれたコンポーネントはつまり、
class SubmitWindow extends TitleWindow
と言う事になるようです。
ですから、変数popUpでクラスをTitleWindowとして宣言し、createPopUp()メソッドで生成したオブジェクトをSubmitWindowにキャストしても問題ないと言う訳です。ただ、上記のケースの場合、キャストする必要はないのですが、あとで必要になります。