JavaFX

Image Getter の致命的欠陥を Fix.

JavaFX

昨日のエントリーで紹介した Image Getter ですけど致命的欠陥がありました。

動画をご覧になったか、Java Web Start で動かしてみた人はすぐに気付いたでしょう。

画像取得の待ち時間アプリがフリーズしているような振る舞いをしてます。

学習用のお遊びアプリだからいいやって思っていたのですが気になってしかたなくなり、やっつけで直しました。

非同期処理の実装と画像取得待ちの間、メニューの About 以外のものを非活性化させました。

ついでにプログレスインジケーターも付けてみました。

これで動いてる安心感がでますね。

この非活性化の部分は力技で実装してしまいましたが、JDK6 あたりからだったかな?まとめて非活性化させる方法があったような記憶があります。

ちょっと思い出せないのが残念ですけど JavaFX でもまとめて非活性化させる方法があると便利なんですけどね。

実は ITpro で櫻庭さんが執筆されている「JavaFX2 で始める GUI 開発」を参考に学習してます。

その櫻庭さんが Twitter で来月は非同期処理について執筆されることを教えていただきました。

今回のお遊びサンプルアプリでは戻り値は無しでした。

JavaFX2.2 の API ドキュメントのサンプルでは数種類のパターンが説明されてましたが何しろ英語なので良く解りません。(>_<。)

来月の櫻庭さんの記事では GUI 開発で絶対に避けて通れない非同期処理を取り上げてくれるとのことで楽しみです!

でも、サンプルと同じようなイメージビューアを創るはずだったんですけど脱線してしまいこんなになって第4回からまだ読めてない。(ヲヒ

まぁ、楽しめているから良し!としよう。(^_^)

Fix した Image Getter の動画と Java Web Start を貼っておきますね~。

Webstart: click to launch this app as webstart (Java 8 実行環境必須)

Hatena タグ:

JavaFX 学習がてらにつまらないアプリをつくってしまった。

JavaFX

少し前から JavaFX を遊びながら学習しはじめたのですが情報が古い物から新しい物まであって何が何だか解らなくなります。

それだけ JavaFX は黒歴史なんだなぁって再認識しました。

それは置いといてどんなものを作ったかというと・・・

ついこの間はじめたばかりなのでネット上のサンプルを真似ていろいろ、あーでもない、こーでもない。。。

なんでこのコードで動かないの?

なんでこのコードで動くの?って状態でプログラムくんでます。(^_^;)

そんなこんなで創ったのは、あるサイトの画像を表示させるというプログラムです。

ついでに、1秒から5秒までのタイムリミット機能をつけてみました。

タイムアウト時にはデフォルト画像をお茶を濁す感じで表示させてみました。

無事に画像を表示させたらエフェクトをかけられるようにしました。

さらに、その画像を保存できるようにしてみました。

ただ、お遊びプログラムなので画像取得先サイトは3件だけです。

私の好みの女性タレント 堀北 真希さんと 北川 景子さんのブログから一枚取得するようにしました。

あと一つは 5秒以内で取得できない想定のために NASA です。

このプログラムではダミーで3秒のスリープをいれてあります。

以下にスクリーンショットと動画を貼っておきますね。

1

2

3

4

5

6

7

8

9

10

ちなみに最後の画像のダイアログはお遊びです。

普通はこんな問いかけはないですよね。

動画は仮想マシン上の Windows 8.1 で実行したものをキャプチャしたものなのでちょっと動作が緩慢になっています。

よ~く動画をみるとこのプログラムには致命的な欠点があることに気付きます。

学習用のお遊びサンプルとしては問題ないのですが・・・

そういう理由で今回はコードを晒しません。

そもそも学習し始めた初心者のコードに興味を持つ人はいないだろう。

動画が再生できない、もしくはこの欠陥アプリを使いたい人のために Java Web Start もおいときます。

Java 8 に依存している部分があるので Java 8 の実行環境でないと動かないです。

こちらは 0.5 秒のダミー(スリープ)をいれてあります。

Webstart: click to launch this app as webstart (Java 8 実行環境必須)

Hatena タグ:

JavaFX でさらに足し算のお勉強

JavaFX NetBeans

前回のプログラムを利用して今回も JavaFX で足し算アプリに手を加えてみることにしました。

今回追加する機能は アプリのウィンドウサイズの変更をできないようにする。

チェックボックスを利用して BGM を流せるようにする。

問題の難易度を選択できるようにトグルボタンを排他制御して可能にする。

ツールチップを設定する。

ニーモニックを設定する。

結局、こんな感じにできあがりました。

1

 

2

 

3

 

4

 

トグルボタンは私の実力ではニーモニックを正しく動作させることができなかったので諦めました。(>_<。)

素直にラジオボタンを使えばよかったかも・・・

トグルボタンの排他制御のイベント処理はかなり怪しいことをしています。

我ながらこれは無いだろうと思いながら他に良い方法を知らないので動けばいいやってのりでやってます。(オヒ

だからニーモニックが・・・・・ とどのつまりラジオボタンを使おう、今度からは。

いちおう、なんとか動いたので良しとしました。(^_^;)

それではそんなこんなでいい加減ですがプログラムを晒しておきます。

アプリのウィンドウサイズの変更をできないようにするために Calc2.java の 19 行目で

stage.setResizable(false);

としています。

チェックボックスを利用して BGM を流せるようにするために CalcFormController.java の 163 行目から 178 行目までで

チェックボックスにリスナーを設定して制御しています。

トグルボタンはグループ化して排他制御可能としてます。

これは JavaFX Scene Builder を使って簡単に設定できます。

トグルボタンのイベントをそれぞれ実装して JavaFX Scene Builder で結びつければいいだけです。

トグルボタンのグループも JavaFX Scene Builder で簡単に設定できます。便利!便利!

ただ前述したとおりトグルボタンが必ずどれか一つ選択状態にあるようにしたいため適当なことをやっています。

おそらく、なんだこれは?といいたくなるかもしれませんがスマートな方法を知らないのでこうなりました。(^_^;)

よってトグルボタンにニーモニックを設定しても上手く動作しなくなります。だからニーモニックはあきらめました。(ヲヒ

チェックボックス、テキストフィールド、ボタンにはニーモニックを JavaFX Scene Builder で簡単に設定できます。

プロパティの Text 欄に _ を先頭につけて記入し(_BGM)

5

 

Mnemonic Parsing のチェックボックスを ON にすればいいだけです。

6

 

ツールチップも同様に JavaFX Scene Builder を使えば楽勝です!

JavaFX Scene Builder のライブラリ Popup Controls から Tooltip をドラッグアンドドロップして

プロパティを設定してやればいいだけという非常に楽ちんな作業です。

7

 

以上、こんな感じでできあがりました。

Webstart: click to launch this app as webstart

ちょっと五月蠅くなってしまいましたがご勘弁を。

もっといろいろ楽しいことが出来るようなのでボチボチと遊んでみたいと思ってます。

cludia_2013_08_06_001

Hatena タグ: ,


JavaFX で足し算のお勉強

JavaFX NetBeans

JavaFX を少し前から触りだしたのですがさっぱり解らない状態のままです。

某サイトの記事を参考に進めているのですが行き当たりばったりでやってます。

ということで今回はちょっとした足し算を出題するプログラムを組んでみることにしました。

特に難しいことはやってないし、GUI の設計は JavaFX Scene Builder でポトペタやれば NetBeans IDE との連携で楽ちんだよ!

AnchorPane のコードプロパティでコントローラ・クラスを NetBeans IDE との連携により選択できます。

レイアウトとかの編集も視覚的に確認できて楽です!

4

 

Button のコードプロパティでは fx:id , On Action などの設定も可能です。

NetBeans IDE との連携機能で JavaFX アプリを創るにはこれしか無いってほど強力ですね。

5

 

そんなこんなでできあがったのはこんな感じの完成度の低いアプリです。

1

2

3

 

TextField には入力制限をかけたかったのですが面倒なことをしなくてはいけなそうなので 0 から 9 以外の文字(全角文字も)が入力された場合はエラーメッセージを出すように手を抜きました。

標準で入力制限をかけるようなものが用意されてないのは残念です。(あるかもしれません。)

JavaFX はじめて 3時間くらいでここまで出来るのは優秀な開発環境のおかげですね。

それではソースコードを載せておきますね。

まだ JavaFX をはじめたばかりなので間違いがあるかもしれませんが笑って許してくださいね。(^_^;)

ついでに Java Web Start もリンクしておきますね。

 

Webstart: click to launch Calc app as webstart

 

適当だけど組んだプログラムが動くってことは今でも素直に嬉しい!

もっといろいろ楽しめそうな気がしてきました。(^_^)

cludia_2013_08_05_001

 

Hatena タグ: ,

JavaFX はじめました! FXML 編

JavaFX NetBeans

今日は FXML を使って JavaFX でお約束の Hello World を創っていきます。

JavaFX Scene Builder を使えば Android アプリをつくるようにできるらしいのですが

私は JavaFX Scene Builder を一度も使ったことないし、設定項目の多いプロパティもよく解らないので適当にやってみます。(ヲヒ

メニューバーから[ファイル]-[新規プロジェクト]を選択します。

そして今度はプロジェクトの項目は JavaFX FXML Application を選択し、[ 次> ] ボタンを押します。

1

 

FXML を使うので FXML 名を記入します。

そして [ 終了 ] ボタンを押します。

2

 

NetBeans IDE によって下図のようにプロジェクトが作成されます。

Hello.fxml

HelloController.java

HelloWorld4FXML.java

が作成されているのが確認できます。

3

 

HelloWorld4FXML.java

4

 

HelloController.java

5

 

Hello.fxml

6

 

それではこのまま動かしてみましょう。

7

 

Click Me! と書かれたボタンを押すと Hello World! とラベルに表示されます。

それと標準出力にも You clicked me! と出力されます。

8

 

GUI の設計は FXML でイベントコントロールは HelloController.java (コントロールクラス)で行ってますね。

さて、NetBeans IDE が自動生成してくれたコードを動かすだけでは面白くないので少し変更してみます。

GUI を少し変更したいので JavaFX Scene Builder を起動します。

Hello.fxml ファイルをダブルクリックするか、右クリックからのコンテキストメニューで [ 開く ] を選択します。

9

 

JavaFX Scene Builder が現在のプロジェクトの情報をもとに起動します。

10

 

右側にあるインスペクタで選択されたコンポーネントのプロパティを設定できるようです。

設定項目多すぎて解りません。(>_<。)

Java SE 8 がリリースされたら JavaFX のリファレンス本が出版されるだろうから詳細はそれ待ちってことにしよう。

今は直感的操作にたよります。

11

 

とりあえず、グリグリしてこんな具合にしてみました。(センスないなぁ・・・

11a

 

Hello.fxml はこのようになりました。

何やら赤いバッジがついてますが気にしない(ヲヒ

12

 

HelloController.java を次のように変更してボタンを押すたびに表示を変更するようにしてみました。

13

 

実行結果はこのようになります。

14

15

16

 

標準出力にも期待通りの出力がされました。

今回初めて JavaFX Scene Builder を使ったのですが複雑なハイテク技術満載の日本製家電製品を使いこなせない一般ユーザーの気持ちに似たものを感じました。

それぞれのコンポーネントのプロパティやエフェクト等を知らないと使いこなせないです!

やっぱり地道に情報収集して少しずつしっかり覚えていかなければいけないようです。

私の場合、ゆっくり楽しみながらがモットーなので面白くないと思った時点でストップして気が向いたら再開すればいいだけのことなので気楽です。

おそらく Java SE 8 がリリースされたらそれらの書籍とともに JavaFX の書籍も出版されるだろうし、

JavaFX Scene Builder を使って開発するのがスタンダードになるだろうからそれまでに予備知識として少しでも慣れておくことを目的としよう!(後ろ向き発言

cludia_2013_07_27_001

Hatena タグ: ,

« 古い記事 新しい記事 »