作品タイトル・概要

カクテルパレット(Cocktail Palette)
簡単なカクテルレシピ情報アプリ。カクテル名、材料、作り方等を検索・表示できる。

使用言語

JAVA(JavaFx,fxml,Java8ベース)

コンセプト、ポイント

  • せっかくJAVAを勉強したのでとにかくJAVAを使って作ってみたい。
  • ネットやサーバーを必要としない、小型のスタンドアロンアプリ。
  • JavaFxを使ってGUIを持つアプリとして、PCやMac等マルチプラットフォームで起動。
  • カクテルレシピはデータファイルとして持ち、DBは使わないが、今後DB化できるように外部ファイルとする。
  • カクテルレシピはデータファイルはテキストファイル等簡単に編集・追加できるものにする。

設計・仕様

01.簡単なウィンドウGUIアプリ

ウィンドウサイズ固定。メニューなし。ボタン、コンボボックス等での操作のみ。

02.検索

カクテル名と材料の2種類のテキスト部分一致検索ができ、該当するカクテルリストを表示。

03.ベースドリンク別リスト表示

コンボボックスでベースとなるドリンクを選ぶと、それをベースとしたカクテルリストを表示。

04.詳細レシピ表示

表示されたカクテルリストから1つのカクテル名を選択し、詳細表示ボタンをクリックすると
カクテル名、コメント、材料、作り方を表示。リストとカクテル名、コメントは切り替え表示。

05.作り方コピー機能

作り方をコピーボタンをクリックすると、表示中の作り方をテキストデータとして
クリップボードにコピーする。他アプリ等へペーストできる。

06.アプリ終了

閉じるボタンでウィンドウを閉じ、アプリ終了。

07.ファイル・クラス構成

メインアプリクラス、基本レイアウト用fxmlファイル、ウィンドウ初期化・イベント記述クラス、
ベースドリンク別カクテル名取得・管理クラス、レシピデータファイル読み込み・検索クラス、
シピデータテキストファイル、選択カクテル各詳細情報管理クラス等々。

苦労した点、困った点

1.JavaFxに関する情報はまだまだ少ないので、問題時解決等で苦労した。
2.基本GUI・レイアウトはXMLファイル・CSSファイルで作成できるが、外部CSSファイルを使うとシーンビルダー
(GUIのfxml作成ツール)では表示が反映されるのに、実際にJAVAでコンパイル、実行すると表示が反映されない。
結局インラインCSSしか利用できなかった。
3.自宅のMacと学校のPCで文字コードが違いコンパイルエラーになる。
4.自宅のMacと学校のPCでGUIのレイアウトサイズが微妙に異なる。
5.JAVAでHashMapの連想配列の値にArrayListを入れる二次配列を作り、その結果を戻り値として渡すものを作ったが、
型宣言でジェネリクスの設定が長くなり、きっちりあわせないといけないところがややっこしかった。
6.CSVファイルや画像ファイルの読み込みがclassファイルの実行だとうまくいくのに、jarファイルやさらに
EXEファイルにすると、そのままFileクラスにPathを渡していると取得できなくなる問題が起きた。
結局getClass().getClassLoader().getResourceAsStream("ファイル名");としてInputStream型変数に
入れないとアクセスできなかった。
7.JavaFxのFMXLファイルにあるリソース(コントロールの各インスタンス等)を指定するのにFMXLに別途
コントローラクラスを作れば簡単だが、ウィンドウの生成元のクラスで指定する方法が情報がほとんどなく
わかりにくかったが、Button close = (Button)root.lookup("#close");(rootは親レイアウトのインスタンス、
#closeはFXMLのfx:id)のように取ってこれることがやっとわかった。
8.EXEにする時は簡単にできるHIRUKAWA Ryoさんのツール「exewrap」を使わせていただいたが、
32bit版と64bit版があり、それぞれのバージョンでそれぞれの32bit、64bitの環境で実行しないと
それぞれのバージョンのJavaVMが得られず失敗することがわかるまで結構時間がかかった。
9.javafx.print.printerJobというクラスがJAVA8で追加になったことがわかりテキストフィールドを
そのまま印刷するメソッドを利用したが、なぜかどうしてもフィールドの枠の分だけ背景がグレーになって
しまう現象が起きた。Macでも同様でさらに文字が一部消えてしまう。これら解決策は見つからなかった。
グラフィックスのテキストとして描画して印刷するしかないかも。

感想、まとめ

JavaFxの情報が少なく大変だったが、今までJavaはプロンプト表示だけだったのでアプリケーションらしくGUIが
あるものが作れてよかった。
GUIレイアウト用XMLやCSSまたXML中でJavaScriptが使える等様々な要素があるJavaFxがとても興味深かった。
DBを使わず、情報の検索などの処理
この最終発表用のデータ、作品本体プログラム、DVD作成、就職活動等とても忙しい。