Calms blog

CALMSブログ

JavaFXで"常に手前に表示"(JavaFX 2.2)

 

 結論から言うとJavaFXだけじゃ出来ないらしい。

 

 昨日ふとデスクトップ画面上に直接メモをするソフトが欲しくなったので、どうせだからとJavaFXで作り始めました。

 さっとマウスで透過Canvas上にお絵描きするところまでは作ったのですが、そこでふと「常に手前に表示機能が欲しいなぁ」と思ってAPIドキュメント見ていたら、ふむむ?見つからない。

 Swingで出来ることってもうだいたいJavaFXでも出来るんじゃないの? と思いつつググってみると。

 

JavaFX 2.2 Stage always on top - StackOverflow

 "僕が知っている限りJavaFXのStageにそのAPIはないよ。代わりにJFXPanelをJFrame 突っ込めば出来るけど"

 

 えー、ないんだー。Swingでも1.5からと少し遅めの実装でしたが、JavaFXなら最初からついていると思ってた。

 まーしょうがないかーと思ったけど、StageからJFrameにした途端MouseEventのパフォーマンスは悪くなるし、Stageは自分だけ透明にできるけど、JFrameは乗っているコンポーネントまで道連れにするしでなんだか面倒になってきた。

 てかStageからJFrameにしちゃうともうJavaFXアプリケーションじゃなくてSwingアプリケーションじゃん、とか思ってわずか半日でプロジェクトの終了が決定。JavaFXをやる口実みたいなソフトだったし、ならいいや、みたいな。

 JavaFXにalwaysOnTopがついたらまた手を付けようかと思います。そう遠くないうちに実装されると・・・思いたい。

 

 ちなみにJFXPanelをJFrameに突っ込む方法はJFXPanelのAPIドキュメントにサンプルが載っています。Stageの部分をJFXPanelにして、あとは普通にJFrameにaddするだけ。

 でもJava7はまだ入っていない端末も多いので、JFrame使うなら全部Swingにしたほうがすぐに動く端末多くていいよねと思う。やっぱりJavaFX使うなら全部JavaFXにしたいよね(Swingの中身を徐々にJavaFXに移行するって使い方はありかもしれないけど)。

 

JFXPanel (JavaFX 2.2)