【Java】タイピングゲーム作ったときのメモ書き

JFrame

JFrameは、四角いウィンドウが表示され、その中に文字やボタンが並ぶアプリを作るときに使う、Javaの標準ライブラリ「Swing」に含まれる。
 →そのため追加のライブラリやプラグインのインストールは不要
タイトルバー、閉じるボタン、最小化ボタンなどOS標準のウィンドウの見た目・機能を持つ。

ウィンドウに表示させたいものは以下の部品を配置していく。(コンポーネントっていうらしい)

  • JLabel(文字表示)
  • JTextField(文字入力欄)
  • JButton(ボタン)

KeyListenerとDocumentListenerの使い分け

入力した文字を検出する方法はいくつかある。今回はKeyListenerとDocumentLintenerについて記述する。

KeyListener

入力文字を監視することができるインターフェース。以下の3つのメソッドをすべて実装する必要がある。

  • keyPressed(KeyEvent e):キーが押された瞬間に呼ばれる
  • keyReleased(KeyEvent e):キーが離された瞬間に呼ばれる
  • keyTyped(KeyEvent e):文字として入力が確定した瞬間(日本語入力などは反映が遅れる場合あり)に呼ばれる

今回のようなタイピングゲームでは、基本的に“keyTyped”か“keyPerssed”を使うことが多く、特に英数字はkeyTypedが扱いやすい。

DocumentLintener

日本語入力をするときに使う。テキストフィールドの中身が実際に変化したことを検知してくれる。英数字・日本語・IME確定後の文字など入力方法を問わず、最終的にテキストフィールドに入った文字列を正しく取得する。

// インポートするもの
import javax.swing.event.DocumentListener;
import javax.swing.event.DocumentEvent;

// 使うとき
textField.getDocument().addDocumentListener(new DocumentListener() {
    @Override
    public void insertUpdate(DocumentEvent e) {
        // 文字が追加された時
        System.out.println("現在の入力内容: " + textField.getText());
    }

    @Override
    public void removeUpdate(DocumentEvent e) {
        // 文字が削除された時(BackSpaceなど)
        System.out.println("現在の入力内容: " + textField.getText());
    }

    @Override
    public void changedUpdate(DocumentEvent e) {
        // 属性が変更された時(プレーンテキストではほぼ使わない)
    }
});