シスアーキ in はてな

シスアーキ(自称)の技術ブログ

AndroidでJavaFXを動かしてみたよ!

 << 22日目 24日目>>

この記事は JavaFX Advent Calendar 2014 23 日目の記事です。


JavaFX Advent Calendar 2014 - Adventar

 

JavaFXはSwingに代わるJavaの新たなクライアントサイド技術です。そして現在のクライアントサイドの主流端末はタブレットですね。

そこで、JavaFXタブレット上で動かすことに挑戦しました!

JavaFXAndroidで動かす為に使用した技術は『JavaFXPorts』です。

http://javafxports.org/page/home

 

『The true spirit of Write Once, Run Anywhere.』

とサイトに記載があるように、JavaFXAndroidiOSで動かせるようにするのが目標のようです。

JavaFXPortsの詳細は、「What is JavaFXPorts?」をご覧ください。

今回はAndroidタブレット上での動作に挑戦しました!

 

動作方法は、「Getting Started」に書かれています*1

 

僕が検証に使用したのは、本日時点で最新の「dalvik-sdk-8u40-ea3.zip」です。

開発端末はMBPを用いました。

環境によりますが、動作するまでには色々なエラーを踏むと思います。まずは、ダウンロードしたdalvik-sdkにある、samplesのHelloWorldを動かすのを目標にしましょう。

ダウンロードしたDalvik JavaFX SDKAndroid SDKのパスをlocal.propertiesに記述してあげれば、それで準備OKです。

(例)

sdk.dir=/Applications/adt-bundle-mac-x86_64-20140702/sdk
javafx.dir=/Users/s_kozake/dalvik-sdk/dalvik-sdk-8u40-ea3 

 

そして、Androidタブレットをコンピュータに接続して、

./gradlew installDebug

タブレットで動かす事ができました!

f:id:kozake:20141222122119p:plain

 

ボタンを押すと、ラベルが変わります。

f:id:kozake:20141222122129p:plain

 

もし、ビルドでエラーが発生した場合は、stacktraceオプションをつけてエラー内容を

参照して対処してください。

./gradlew installDebug --stacktrace

 

ビルドは成功して、タブレットにアプリケーションはインストールされたけど動作しない場合は、logcatでログを表示してエラー内容を確認できます。

{sdk.dir}/platform-tools/adb logcat


もちろん、ボタンを押せただけだと何も面白くありません!

JavaFXの色々な機能を簡単に試してみました!!


・WebView 

WebView browser = (WebView) root.lookup("#browser");
WebEngine engine = browser.getEngine();
engine.load("http://google.com");

twitterも見れました!*3

f:id:kozake:20141223072527p:plain


・Chart

ObservableList<PieChart.Data> pieChartData =
  FXCollections.observableArrayList(
    new PieChart.Data("No Money..(; ;)", 0.7110),
    new PieChart.Data("I have a lot of Money!!(((o(^ ^)o)))", 0.2790),
    new PieChart.Data("Etc", 0.01)
);

PieChart chart = (PieChart) root.lookup("#PieChart");
chart.setData(pieChartData);
chart.setTitle("No Money or a lot of Money");

 PieChartも表示できました!

f:id:kozake:20141222122147p:plain


・Binding

TextArea shipping = (TextArea) root.lookup("#shipping");
TextArea billing = (TextArea) root.lookup("#billing");
billing.textProperty().bindBidirectional(shipping.textProperty());

上と下のテキストエリアの入力がバインディングで機能することも確認できました!

f:id:kozake:20141222122156p:plain

 

無事、動きました!!!(((o(*゚▽゚*)o)))

 

まだまだ日本語入力まわりが弱かったり、動作ももっさりしています。

グラフで日本語を表示しようとしたらダメでした。Fontのロードに失敗しているみたい。
また、どうやって内部DB(SQLite)にアクセスするのかなども分かっていません。

ただ、現状でそこそこ動くみたいですし、将来的にどうなるかが楽しみですね。

検証に使ったソースはGithubに上げていますので、参考にしてください。

https://github.com/kozake/androidFX

 

明日は orekyuu さんの「JavaFXで夢のCanvasライフ」です!

*1:若干内容が古いかもです

*2:古いAPIバージョンでは動作しませんでした。最新にしましょう!

*3:昨日食べた白子画像。うまかった!!