見出し画像

Swingによるデスクトップアプリケーション開発(商品在庫検索)-JavaSE1.8

Java8のSwing環境でデスクトップアプリケーションの開発方法を学ぶ講座をシリーズで提供しています。今回はWindowBuilder(Swingデザイナー)を使ってPostgreSQLデータベースに接続して商品の在庫を検索するシステムを作成します。

2024年9月よりECLIPSEのバージョンを最新版(Version: 2024-06 (4.32.0))に変更しました。


外部設計

(仕様)
・初期起動時(図1参照)にクリック可能なボタンは「ログイン」と「リセット」だけです。
・サーバのIPアドレス、データベース名はデフォルトでの設定値を表示します。
・リセットボタンのクリックで利用者電話番号とパスワードの入力領域がクリアされます。
・認証用に登録済みの利用者電話番号とパスワードを入力しログインボタンのクリックで認証が成功すると、「在庫状況取得」と「ログアウト」のボタンが使用可能になり商品在庫の検索が可能になります(図2参照)。
・この時、「ログイン」と「リセット」ボタンは使用不可となります。
・認証できないときは「認証不可」のメッセージを赤色で表示します。
・「ログアウト」ボタンをクリックすることでデータベースの接続を断ち「在庫状況取得」と「ログアウト」のボタンを使用不可にし、「利用者電話番号」「パスワード」「検索結果」の各領域をクリアして、「ログイン」と「リセット」のボタンを使用可能にします。

図1.初期起動画面
図2.認証完了後在庫検索画面

内部設計

DB設計

「時計在庫検索システム-EE8,PostgreSQL」で定義されたDB設計を用います。当該Webページの認証方式、論理設計、物理設計、を参照して実装してください。
また、認証用のT_USERテーブルも同様に当該Webページを参照して実装してください。 

処理ロジック

DBに接続して在庫検索を行う業務ロジック(DataAccessObject)を実装します。詳細は「時計在庫検索システム-EE8,PostgreSQL」で作成したクラスファイルの仕様と実装を参照してください。作成するクラスファイル(Bean)のクラス図は以下のようになります。

LoginCheckBean.classの仕様とクラス図

(仕様)
・データベースからTEL番号をキーにハッシュ化されたパスワードを取得し
 ます(ハッシュ化されたパスワードは事前にDBに登録されています)。
・コンストラクタの引数でキーとなる電話番号とPostgreSQLサーバのIPとDB
 名を指定して実体化します。
・コンストラクタの実行により対象となる電話番号のパスワードが取得され
 ます。電話番号が登録されていないときにはパスワードは空となります。
・利用側のクラスはgetPassword()メソッドでパスワードを取得します。

(クラス図)

図3.LoginCheckBeanクラス図

ZaikoItemListBean.classの仕様とクラス図

(仕様)
・データベースから商品番号をキーに商品情報のリストを作成します。
・コンストラクタの引数で商品番号とPostgreSQLサーバのIPとDB名を指定し
 て実体化します。
・zaikoItemListHtml()メソッドの実行によりDBから商品情報を取得し、昇順
 の並べかえを行ってテーブル整形されたhtml文を生成します。
・その際、シリーズごとの出力や全件出力にも対応させます。
・さらに、時計のイメージ画像の出力にも対応させます。
(時計の画像はimages-watchフォルダ内から読み込みます)
・生成されたhtml文はresultHtmlフィールドに格納されます。
・利用側のクラスはgetResultHtml()メソッドで商品リスト(html文)を取得
 します。

(クラス図)

図4.ZaikoItemListBeanクラス図

実装準備

プロジェクトの作成

Eclipseのメニューバーより
ファイル→新規→Javaプロジェクト→「SwingZaiko」プロジェクトを作成
→図5の内容で設定する

図5.SwingZaikoプロジェクト設定

※作成済みであればこの処理は必要ありません。


以下画面のスクリーンショットはライトテーマで取得します。
(ライトテーマの設定方法)
Eclipseのメニューバーより
 ウィンドウ → 設定 → 一般 → 外観 → ルック&フィール → ライト
 → 適用して閉じる → Eclipseの再起動がかかります 


外部ファイルの利用準備

(1)jarファイルの準備をします
以下Windows環境を想定しています。
事前に「提供Library」フォルダを作成しておきます。
(例 c:¥提供Library)

図6のように提供Libraryフォルダ内に以下のの2つのjarファイルを保存しておきます。
ハッシュライブラリ:commons-codec-1.15.jar
jdbcドライバ:org.postgresql.driver.jar

図6.Hashライブラリとjdbcドライバの保存

ビルド・パスに追加

(1)jarファイルを登録します
2つのjarファイルをビルド・パスに追加します。

Eclipseパッケージ・エクスプローラより
SwingZaikoプロジェクトを右クリック→ビルド・パス
→ビルド・パスの構成→「ライブラリ」タブ→外部JARの追加
→Ctrlキーを押しながらcommons-codec-1.15.jarorg.postgresql.driver.jarをクリック→「開く」をクリックします
→最後に「適用して閉じる」をクリック

Eclipse2024の場合 → SwingZaikoプロジェクトを右クリック→プロパティ 
 →Javaのビルド・パスで設定します。
 
※図7のように一度設定されていれば再度設定する必要はありません。

図7.外部JARファイルをビルド・パスに追加

実装

ひな形の作成

WindowBuilderを用いてSwingアプリケーションのスケルトン(骨格)を自動生成させます。

Eclipseパッケージ・エクスプローラより
SwingZaikoプロジェクトを右クリック→新規→その他
→ WindowBuilder → Swingデザイナー → JFrameを選択 → 次へ

以下の内容で作成
  パッケージ:jp.ict.aso.swing
  名前:Inventory

GUI実装

自動生成されたプログラム(スケルトン)からGUIのデザインを実装します。

パレットと構造(コンポーネント、プロパティ)のViewを利用するのがコツです。デザインイメージは設定反映の参考としてとらえた方が良いでしょう。

とりあえず図8のようにGUIを実装します。

図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)を確認してください。

図9.ファイル・ディレクトリ構成

実行確認

不具合などを解消して完成です。GUIの調整も行います。
ちなみに、商品の選択はシリーズ単位で大丈夫です。コンボボックス内にAシリーズ、Bシリーズ、Cシリーズ、Dシリーズの区分で設定しましょう。

図10.商品在庫管理システム在庫検索画面

単独起動

実行可能JARファイル

①せっかくですので、単独で起動できるアプリケーションにエクスポートしましょう。Java1.8以上のJREの環境がWindowsのPCにインストールされていればダブルクリックで起動できます。

Eclipseパッケージ・エクスプローラより
SwingZaikoプロジェクトを右クリック → エクスポート
→ Java → 実行可能JARファイル → 次へ
→ 以下のように設定する → 完了

図11.実行可能JARファイルの設定

以下のような警告が出る場合がありますが、気にしません。

図12.警告ダイアログ

作成されたjarファイルをダブルクリックするとアプリが起動します。

図13.実行可能JARファイル

最後に

今回は、GUIデザイン部分の設定の詳細は提示していません。また、実装変更部分のソースコード例も載せていません。自由に工夫してみてください!

この記事が気に入ったらサポートをしてみませんか?