【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) {
// 属性が変更された時(プレーンテキストではほぼ使わない)
}
});