イントロダクション
前回は、コマンド画面の入力チェック部分を作成しました。
今回は、入力チェックに引っかかった場合の処理を実装します。
設計
入力チェックに引っかかった場合、何も実装していないと
カーソルは移動してしまうので、それを動かないように修正します。
・入力した時点でのカーソルの位置を取得する
・入力したキーが入力禁止の場合にカーソルの位置を戻す
※上下のボタンを押下した時に移動しないようにする
しかし、中途半端になっているのが現状です。動きとしては下のような感じで動きます。
前回のソースコード
public class CmdView extends Application { /** 画面の横サイズ */ private static final int VIEW_WIDTH = 300; /** 画面のたてサイズ */ private static final int VIEW_HEIGHT = 300; /** コマンドの入力開始文字 */ private static final String CMD_START = "Cmd $ "; /** 改行コード */ private static final String LINE_SEPARETOR = System.getProperty("line.separator"); @Override public void start(Stage primary) { TextArea area = createTextArea(); Group root = new Group(); root.getChildren().add(area); Scene scene = new Scene(root, VIEW_WIDTH, VIEW_HEIGHT); primary.setScene(scene); primary.show(); } /** * TextAreaを作成して返却する * @return TextArea */ private TextArea createTextArea() { TextArea area = new TextArea(); // 縦横の幅を設定する area.setPrefWidth(VIEW_WIDTH); area.setPrefHeight(VIEW_HEIGHT); area.setOnKeyPressed(createKeyPressEvent()); // 初期表示文字を設定する area.setText("Hello user please input command!" + LINE_SEPARETOR + CMD_START); // テキストエリアの文字列数 int textLen = area.getText().length(); area.positionCaret(textLen); return area; } private EventHandler<KeyEvent> createKeyPressEvent() { return new EventHandler<KeyEvent>() { public void handle(KeyEvent evt) { // 入力を無効にする if (isDisabledInput(evt)) { System.out.println("*** isDisable ***"); return; } if (KeyCode.ENTER.equals(evt.getCode())) { // Enter キーを謳歌した時の処理、テキストエリアを取得する TextArea src = (TextArea) evt.getSource(); // テキストエリア内の文字列を全て取得 String allText = src.getText(); // "Cmd $ "の文字列の位置を取得 int startPoint = allText.indexOf(CMD_START); } // チェック用のコンソール出力処理 System.out.println("EventType: " + evt.getCode()); System.out.println("Input: " + evt.getCharacter()); } }; } /** * キーボードより入力したキーで受け付けないものを<BR/> * 判定する * @param evt * @return true: 受け付けない入力 / false: 受け付ける入力 */ private boolean isDisabledInput(KeyEvent evt) { boolean isDisable = false; // 入力許可キーのKeyCodeリスト List<KeyCode> acList = createAcceptList(); // チェック処理: 入力禁止するキーの有無をチェック return acList.contains(evt.getCode()); } /** * プロパティファイル、キーを指定して対象のプロパティを<BR/> * 取得する * * @param propNane プロパティファイル名 * @param key プロパティのキー * @return プロパティの値 */ @Depulicated // 使用しないメソッド private String getTargetProperty(String propNane, String key) { String propStr = null; return propStr; } /** * チェック用のリストを作成して返却します<BR/> * 入力禁止のKeyCodeを追加 * @return チェック用のリスト 続きを読む Java Basic GUI作成 〜コマンド画面 フォーカス移動させる修正を行う〜