2009年7月16日木曜日

JavaFXでデータベースアプリ -3

今日は定時に退社できたので、いつもよりゆっくりすごすことができました。
といっても、早い時間はバッティングセンターへ行ったり(私が打つわけじゃないですよ)、子供たちとアイスクリームを食べたりと家族サービスにつとめていたので、NetBeansを開いたのは10時くらい。
本日も1時間強悪戦苦闘して、少し前へ進みました :-)


JavaFXの話をする前に、「ライブラリの追加」でJavaDBのライブラリファイルが出なかった件。
原因は今も分かりませんが、対応策が見つかりました。NetBeansのメニューから「ツール」「ライブラリ」とクリックすると「ライブラリマネージャ」というウィンドウが表示されるので、ここで新規ライブラリを作成し、必要なjarファイルを追加すればOK・・・のようです(断言はしかねますが)。






JavaDBがどこにあるかでパスは変わってくるかと思いますが、私の場合はglassfishv3の中にいたので、そこからjarファイルをとってきています。JDK1.6.0の中にもjavadbフォルダはあるのですが、なぜかlibフォルダがからっぽ。だからリストに出なかったのでしょうか・・・。
ナゾは深まるばかりですが、まぁ、追加の仕方が分かったので、ひとまずヨシとしておきましょう。同じ現象で悩んでいる方(いないかな)の参考になれば幸いです :-)




で、せっかく追加してみたものの、今回はMySQLを使うことにしたので、ひとまずJavaDBのライブラリは削除して先へ進みます。

毎度お世話になりっぱなしのKenji Tachibanaさんのブログ、今回はJavaFX でデータベースに簡単にアクセスできるという事実 - その2を参考にさせて頂いて、JavaFXのGUIを作りました。

Tachibanaさんの記事で紹介されているサンプルはテキストボックスとボタン、ラベルを使ってGUIを構成し、テキストボックスに入力した値に応じてDBからデータを取ってくる」というカッコイイ仕様になっているのですが、なにしろ私はJavaFXのど素人ですから、はじめからそこまで欲張るつもりはありません。
"Simple is best" のポリシーにのっとって、固定SQLの結果が機械的にラベルに表示される、というところからスタートしたいと思います。

こんな感じ。




ひょっとしてこの記事を読まれるかもしれない、私と同じレベルの初心者の方のために、GUIのコードも載せておきます。載せるほどのコードか、という話もありますが。
-------------------------
package javafxdb;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.ext.swing.SwingLabel;

Stage {
  title: "JavaFX meets MySQL !"
  width: 250
  height: 80
  scene: Scene {
   content: [
    SwingLabel {
     text: "ここにデータが出る予定"
    }
   ]
 }
}
-------------------------

コードを書いたら、こちらの記事のインストラクション従って、必要なライブラリを追加。


これで準備は整いましたので、いよいよ「JavaFX meets MySQL」に挑戦です。
Tachibanaさんのブログでは、この部分の説明がJavaFX でデータベースに簡単にアクセスできるという事実 - その3というエントリに書かれているのですが、ここで先ほどGUIの作り込みをサボったのが裏目に出てしまいました。

書いてあるコードをそのまま使えない・・・


曲がりなりにもプログラマの端くれなので、何を書けばいいのかくらいはおおむね見当が付くのですが、問題はそれを「どこに書くか」という点です。

Stageの直下?Sceneの下?それともContentの中?
しかし、迷っていても仕方がないので、とりあえずStageの直下に2行書き足し、import文を編集して、こんな感じにしてみました。

-------------------------
package javafxdb;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.ext.swing.SwingLabel;
import dbconnect.FriendsJpaController;

Stage {
  var DB = new FriendsJpaController()
  var name = DB.findFriends(1).getName()

  title: "JavaFX meets MySQL !"
  width: 250
  height: 80

  scene: Scene {
    content: [
      SwingLabel {
        text: name
      }
    ]
  }
}
-------------------------

さぁ、これでアプリケーションは完成(のつもり)です。
鬼が出るか蛇が出るか、とりあえず試してみようじゃないの、ということで実行ボタンをクリック。

まつことしばし・・・出たっ。
やったー、おもわくどおりfriendsテーブルのid=1の値がラベルに表示されました!




・・・ということで、ともあれJavaFXからデータベースに繋げるところまではこぎつけました。
これもひとえにTachibanaさんと桜庭さんのおかげです。ありがとうございました!


さて、ラベルに自分の名前だけ出して喜んでいるのも切ない話なので、次回はTachibanaさんのところにあったような、検索機能盛り込みバージョンに挑戦してみたいと思います :-)

1 件のコメント:

kazukomori さんのコメント...

JavaFXの知識がないためネットで検索すると日本語トップで表示された、このブログを拝見しました。

JAVA初心者(学習中)な者で、数日前にわからないことがあってIT@会議室のJAVAの掲示板で質問してみたところ、「さくらば」さんというか方から質問事項はJavaでは今のところできないけどJavaFXなら出来ると教わり、掲示板にサンプルソースも提示してただきました。

私はデスクトップアプリ+同様な機能を持ったアンドロイドアプリ+Google App Engineと連携したデータベースを作成したいと思っています。

今後も継続してJavaを習得するのがいいのか?それとも今のうちにJavaFXに乗り換えるべきか?で迷っているところです。

javaFXは初心者でも習得可能でしょうか?
また、JavaFXで希望のソフト(アプリ&DB)の製作は可能でしょうか?

是非ご意見をお願いします。