Java GUI作成 〜プロパティファイルを読む〜

イントロダクション

前回、クローリングについて学びました。
今回は、フレームワークなどを使用しないでウェブにアクセスしてみようと思います。

前回までの実装

Applicationクラスを拡張して、下のような画面を作成する準備をした。最終的には、コマンドを実行する画面を作成しました。この画面を作成するためのコード解説をしています。

この記事の状態としては、画面の表示ができて、下のような文字が表示できている状態です。

Hello user please input command!
Cmd $ >hello
---------------------------------
   * * **    * * *      * * * *
   *     *   *     *  *         *
   *     *   *     * *           *
   * * *     * * *   *
   *    *    *        *     * * *  
   *     *   *          * * * *
   *       * *                *
---------------------------------
  *** push start or continue ***
      start: s     continue: c

---------------------------------

Cmd $ >

この時点で、

やってみること

・フレームワーク(外部のJar)などを使用せずにJDKに含まれているパッケージを使用して実装する。
・作成中のGUIの「CmdView」でコマンドを入力して起動するように追加修正する

設計

<要件>
・指定したURLにアクセスする実装は「UrlAccessor」クラスに任せる
・起動と結果の表示は「CmdView」クラスで行う

<実装部分>
・新規で「UrlAccessor」クラスを作成する
・「CmdView」クラスに「acc」コマンドが入力された時にgoogleの検索画面にアクセスする
追加修正する場所

処理としては、以下のようになります。

  1. コンストラクタで画面を生成するときに、「CmdCls.properties」を読込む処理の実装
  2. キーと値をセットにしているファイルを作成する
  3. 「hello」コマンド(前回作成済み)と「acc」コマンドを作成する

前回までのコード

    /**
     * イベント処理を行うクラスを生成<BR/>
     * ・入力チェックを行い、禁止入力があった場合はカーソルを元の位置に戻す。
     * @return キー入力のイベント処理クラス
     */
    private EventHandler<KeyEvent> createKeyPressEvent() {
        return new EventHandler<KeyEvent>() {
            public void handle(KeyEvent evt) {
                // テキストエリアを取得する
                TextArea src = (TextArea) evt.getSource();
                // 入力を無効にする
                if (isDisabledInput(evt)) {
                    System.out.println("*** isDisable ***");
                    resetCursor(src);
                    return;
                }
                if (KeyCode.LEFT.equals(evt.getCode())) {
                    System.out.println("Sart: " + startCursorPos + " Current: " + currentPos + " getCaret: " + src.getCaretPosition());
                    if (startCursorPos > src.getCaretPosition()) {
                        // 左の矢印が押下された時
                        src.positionCaret(currentPos);
                    }
                }
                currentPos = src.getCaretPosition();
                // チェック用のコンソール出力処理
                System.out.println("EventType: " + evt.getCode());
            }
        };
    }

CmdView

コマンドを実行する為のメソッドを追加

if (KeyCode.ENTER.equals(evt.getCode())) {
    // テキストエリア内の文字列を全て取得
    String allText = src.getText();
    String command = getCommand(allText);
    src.setText(allText + CMD_START);
    // "Cmd $ "の文字列の位置を取得
    System.out.println("Command: " + command);
    // コマンドの実行
    executeCmd(command);
    cursorPos = allText.length() + CMD_START.length();
    src.positionCaret(cursorPos);
}

コマンドを実行する為のキーとプロパティを作成

<フィールドにプロパティファイル名(パス)>

/** プロパティファイル名 */
private static final String CMD_PROPERTY = "CmdCls";
/** リソースバンドル */
private ResourceBundle bndle;

<プロパティファイルのロード>

// プロパティファイルのロード
bndle = ResourceBundle.getBundle(CMD_PROPERTY);
System.out.println("Properties: " + bndle.getString("acc"));
/**
 * コマンドを実行します<BR/>
 * 登録したコマンドにない入力の時は<BR/>
 * エラーメッセージをテキストエリアに出力します。
 * @param command コマンド文字列
 */
private void executeCmd(String command) {
     // この部分は次回作成します。
}

まとめ

表示したコマンド画面に、入力した値(文字列)から「コマンド」部分を切り出してコマンドを取得する「getCommand()」を作成思案した。

コマンドの実装部分は次回ということで
でわでわ。。。

投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す