Tadotter - Eclipse RCP版 (1.1.2.v20090921) | 2009-09-21 15:19 |
Tadotter - JavaFX版 (2.0.1) | 2009-07-06 11:19 |
run関数は.fxスクリプトファイルを実行したときに、自動的に呼び出されるスクリプト関数です。 インスタンス関数ではありません。 run関数は.fxファイルに一回だけ宣言できます。 Javaのpublic static void main(String args[])に相当します。
run関数を他のスクリプトから呼び出すこを想定しているなら、 適切なアクセス識別子(publicなど)を設定してください。
run関数の引数には、実行時のコマンドライン引数が渡されます。引数が不要なら省略できます。 標準実行とWeb Start実行では引数が渡って来ますが、 ブラウザ実行(アプレット)とモバイル実行では渡って来ません。 他の方法で引数を取得する必要があります。別のTipsで説明しています。
戻り値の型の指定(Void)は省略できます。
例:
public function run(args:String[]):Void { println("args = {args.toString()}"); }
実行結果:
args = [ one, two, three ]
引数と戻り値の型の両方を省略した例:
function run() { }
スクリプトレベルでStageをインスタンス化(オブジェクトリテラルを宣言)すると、 ウインドウが開きます。 また、run関数の中でStageをインスタンス化しても同様です。 では、スクリプトレベルでStageをインスタンス化しつつ、何らかの初期処理を run関数にやらせることはできるでしょうか。
例1:
var title:String; function run(args:String[]):Void{ title = arges.toString(); } Stage { title : bind title scene: Scene { width: 200 height: 200 content: [ ] } }
これはエラーになります。コンパイルできません。Stageを変数に保存してください。 コマンドライン引数を取る例なので標準の実行か、あるいはWeb Start実行をしてください。
例2:
var title:String; function run(args:String[]):Void{ title = arges.toString(); } def stage = Stage { title : bind title scene: Scene { width: 200 height: 200 content: [ ] } }
bindさせてやることで目的は達成されます。このbindをしないと値が反映されません。 つまりrun関数がスクリプト変数stageの初期化よりも先という保証は無いようです。
次はrun関数の中でStageをインスタンス化します。
例3:
function run(args:String[]):Void{ Stage{ title:args.toString(); scene: Scene { width: 200 height: 200 content: [ ] } } }
これも問題ありません。最初に(勝手に)動くのがrun関数だけで、そのブロック内を 順番に処理が進むのでわかりやすく確実です。bindは不要です。
私がよくやるのは前述の「例3」です。カスタムノードを作ったとき、必ずrun関数で Stageを作って、scene.contentにそのカスタムノードを食わせます。 そうすることで、ビルドすること無しにNetBeans IDEのJavaFXプレビューに、 カスタムノードが出現します。 このおかげで見栄えを整える作業がとても楽です。 .fxを更新するたびにJavaFXプレビューで確認できるのですから。
また、そのStageにアニメーションを起動するボタンや、属性を変化させるコントロールを配置すれば、 カスタムノードを単体で起動(右クリックでRun File)することで、 単体テストが行えます。
図:LevelMeterカスタムノードのrunから起動されたStage
自作のカスタムノードがアプリケーション本体から 呼び出されるのは、オブジェクトリテラルによるインスタンスであって、 スクリプトレベルのrun関数が呼び出されるわけではありません。 (また、そうしてはいけません。) 従って、run関数をそのまま残しておいて問題ありませんし、 保守を考えれば是非残すべきでしょう。
[PageInfo]
LastUpdate: 2009-08-04 20:04:21, ModifiedBy: happyhills
[Permissions]
view:all, edit:login users, delete/config:members