Swingによるデスクトップアプリケーション開発(商品在庫検索)-JavaSE1.8
Java8のSwing環境でデスクトップアプリケーションの開発方法を学ぶ講座をシリーズで提供しています。今回はWindowBuilder(Swingデザイナー)を使ってPostgreSQLデータベースに接続して商品の在庫を検索するシステムを作成します。
2024年9月よりECLIPSEのバージョンを最新版(Version: 2024-06 (4.32.0))に変更しました。
外部設計
(仕様)
・初期起動時(図1参照)にクリック可能なボタンは「ログイン」と「リセット」だけです。
・サーバのIPアドレス、データベース名はデフォルトでの設定値を表示します。
・リセットボタンのクリックで利用者電話番号とパスワードの入力領域がクリアされます。
・認証用に登録済みの利用者電話番号とパスワードを入力しログインボタンのクリックで認証が成功すると、「在庫状況取得」と「ログアウト」のボタンが使用可能になり商品在庫の検索が可能になります(図2参照)。
・この時、「ログイン」と「リセット」ボタンは使用不可となります。
・認証できないときは「認証不可」のメッセージを赤色で表示します。
・「ログアウト」ボタンをクリックすることでデータベースの接続を断ち「在庫状況取得」と「ログアウト」のボタンを使用不可にし、「利用者電話番号」「パスワード」「検索結果」の各領域をクリアして、「ログイン」と「リセット」のボタンを使用可能にします。
内部設計
DB設計
「時計在庫検索システム-EE8,PostgreSQL」で定義されたDB設計を用います。当該Webページの認証方式、論理設計、物理設計、を参照して実装してください。
また、認証用のT_USERテーブルも同様に当該Webページを参照して実装してください。
処理ロジック
DBに接続して在庫検索を行う業務ロジック(DataAccessObject)を実装します。詳細は「時計在庫検索システム-EE8,PostgreSQL」で作成したクラスファイルの仕様と実装を参照してください。作成するクラスファイル(Bean)のクラス図は以下のようになります。
LoginCheckBean.classの仕様とクラス図
(仕様)
・データベースからTEL番号をキーにハッシュ化されたパスワードを取得し
ます(ハッシュ化されたパスワードは事前にDBに登録されています)。
・コンストラクタの引数でキーとなる電話番号とPostgreSQLサーバのIPとDB
名を指定して実体化します。
・コンストラクタの実行により対象となる電話番号のパスワードが取得され
ます。電話番号が登録されていないときにはパスワードは空となります。
・利用側のクラスはgetPassword()メソッドでパスワードを取得します。
(クラス図)
ZaikoItemListBean.classの仕様とクラス図
(仕様)
・データベースから商品番号をキーに商品情報のリストを作成します。
・コンストラクタの引数で商品番号とPostgreSQLサーバのIPとDB名を指定し
て実体化します。
・zaikoItemListHtml()メソッドの実行によりDBから商品情報を取得し、昇順
の並べかえを行ってテーブル整形されたhtml文を生成します。
・その際、シリーズごとの出力や全件出力にも対応させます。
・さらに、時計のイメージ画像の出力にも対応させます。
(時計の画像はimages-watchフォルダ内から読み込みます)
・生成されたhtml文はresultHtmlフィールドに格納されます。
・利用側のクラスはgetResultHtml()メソッドで商品リスト(html文)を取得
します。
(クラス図)
実装準備
プロジェクトの作成
Eclipseのメニューバーより
ファイル→新規→Javaプロジェクト→「SwingZaiko」プロジェクトを作成
→図5の内容で設定する
※作成済みであればこの処理は必要ありません。
以下画面のスクリーンショットはライトテーマで取得します。
(ライトテーマの設定方法)
Eclipseのメニューバーより
ウィンドウ → 設定 → 一般 → 外観 → ルック&フィール → ライト
→ 適用して閉じる → Eclipseの再起動がかかります
外部ファイルの利用準備
(1)jarファイルの準備をします
以下Windows環境を想定しています。
事前に「提供Library」フォルダを作成しておきます。
(例 c:¥提供Library)
図6のように提供Libraryフォルダ内に以下のの2つのjarファイルを保存しておきます。
・ハッシュライブラリ:commons-codec-1.15.jar
・jdbcドライバ:org.postgresql.driver.jar
ビルド・パスに追加
(1)jarファイルを登録します
2つのjarファイルをビルド・パスに追加します。
Eclipseパッケージ・エクスプローラより
SwingZaikoプロジェクトを右クリック→ビルド・パス
→ビルド・パスの構成→「ライブラリ」タブ→外部JARの追加
→Ctrlキーを押しながらcommons-codec-1.15.jarとorg.postgresql.driver.jarをクリック→「開く」をクリックします
→最後に「適用して閉じる」をクリック
※Eclipse2024の場合 → SwingZaikoプロジェクトを右クリック→プロパティ
→Javaのビルド・パスで設定します。
※図7のように一度設定されていれば再度設定する必要はありません。
実装
ひな形の作成
WindowBuilderを用いてSwingアプリケーションのスケルトン(骨格)を自動生成させます。
Eclipseパッケージ・エクスプローラより
SwingZaikoプロジェクトを右クリック→新規→その他
→ WindowBuilder → Swingデザイナー → JFrameを選択 → 次へ
以下の内容で作成
パッケージ:jp.ict.aso.swing
名前:Inventory
GUI実装
自動生成されたプログラム(スケルトン)からGUIのデザインを実装します。
パレットと構造(コンポーネント、プロパティ)のViewを利用するのがコツです。デザインイメージは設定反映の参考としてとらえた方が良いでしょう。
とりあえず図8のようにGUIを実装します。
イベント実装
ソースを変更し仕様を実装します。
以下の2つのクラスについては、「時計在庫検索システム-EE8,PostgreSQL」で作成したクラスを使用します。
ただしJavaのバージョンが違うため、今回のプロジェクト内でリコンパイルします。
また、画像を表示するクラスについてはイメージリソースの指定方法がWebアプリとデスクトップアプリでは違うため、一部ソースを変更します。
・LoginCheckBean.java:変更なしでリコンパイル
・ZaikoItemListBean.java:画像指定方法を変更してリコンパイル
(変更内容)
resultHtml = resultHtml+"<td><img src='"+ getClass().getResource("/watch-images/"
+ id + ".png").toString()+ "' width=100></td>";
※あわせてテーブルのセル幅も広めに変えましょう(width=100 程度で大丈夫です)
商品画像ファイルの配置
srcフォルダの直下に商品画像ファイルが入ったwatch-imagesのフォルダを置きます。画像のファイル名は商品IDとなります。
ここまでのファイル・ディレクトリ構成(図9)を確認してください。
実行確認
不具合などを解消して完成です。GUIの調整も行います。
ちなみに、商品の選択はシリーズ単位で大丈夫です。コンボボックス内にAシリーズ、Bシリーズ、Cシリーズ、Dシリーズの区分で設定しましょう。
単独起動
実行可能JARファイル
①せっかくですので、単独で起動できるアプリケーションにエクスポートしましょう。Java1.8以上のJREの環境がWindowsのPCにインストールされていればダブルクリックで起動できます。
Eclipseパッケージ・エクスプローラより
SwingZaikoプロジェクトを右クリック → エクスポート
→ Java → 実行可能JARファイル → 次へ
→ 以下のように設定する → 完了
以下のような警告が出る場合がありますが、気にしません。
作成されたjarファイルをダブルクリックするとアプリが起動します。
最後に
今回は、GUIデザイン部分の設定の詳細は提示していません。また、実装変更部分のソースコード例も載せていません。自由に工夫してみてください!
この記事が気に入ったらサポートをしてみませんか?