イベントリスナを理解しよう

前回の記事では、マウスリスナーについて勉強しました。

今回は同じくリスナーである「キーリスナー」と「アクションリスナー」について勉強します。

リスナー 監視するイベント
KeyListener キーボードの入力イベント
ActionListener 一定時間ごとに自動的に発生するイベント

KeyListenerでキーボードの入力を取得

キーボードから入力を受け取って、自機を動かします。以下が完成イメージです。

ovalmove

KeyListenerには3つのメソッドがあります。

以下にそれぞれのメソッドについて簡単にまとめました。

KeyListenerの各機能

イベント 呼ばれるタイミング
keyPressed キーを押しているとき
keyReleased キーを離したとき
keyTyped キーを入力しているとき

リスナーの追加方法については、MouseListenerのときとほとんど同じです。

コードとしては、以下のようなものになります。

ハイライトで示しましたが、注目すべきポイントが2つあります。

まず、MouseListenerと違って、KeyListenerではあらかじめFieldにフォーカスがあっている必要があります。

そのフォーカスを合わせるために追加したのが、以下の一文です。

次に、KeyEventの内容についてです。

getKeyCode()は、Enterキーやスペースキー、上下左右キーといった、対応する文字コードがないようなボタンの入力を取得するために用います。

getKeyChar()という関数もあり、こちらは「a」や「A」のような、対応する文字が存在するボタンの入力を取得するために用います。

今回は、上下左右キーが押されたときにfillOval()の座標として使っている(x,y)の値を増減することで、自機を移動させています。

アクションリスナー

時間を計測して、自機から弾を発射したときに、弾が自動的に飛んでいくようにします。

完成イメージは以下の通りです。

actionlistener

時間を計測する方法にはいくつかありますが、今回はJavaで最もお手軽な方法であるActionListenerを用いることにします。

本格的にゲームを作るとすると、この方法では厳しいですが、あくまで勉強用ということでActionListenerを使います。

KeyListenerやMouseListenerと異なり、ActionListenerには1つしかメソッドがありません。

ActionListenerの各機能

イベント 呼ばれるタイミング
ActionPerformed 定期的に自動で呼ばれる

このActionPerformed()をオーバーライドすることで、そのコンポーネントに定期的に行わせたい処理を書くことができます。

今回は、自機と別に円をもう一つ作り、その座標を時間ごとに変化させてみます。

1つ注意していただきたいのが、コンストラクタ内のリスナーの追加方法についてです。

MouseListenerやKeyListenerと異なり、Timerのインスタンスを作ってstart()することでタイマーを開始しています。

タイマーのコンストラクタ中の20という数字は、20ミリ秒ごとにこのコンポーネントのactionPerformed()が呼ばれることを表しています。

最後に、repaint()でコンポーネントを再描画するのを忘れないようにしましょう。

この1文を入れないと、変更が画面に反映されません。

代わりに、keyPressed()の中のrepaint()は削除しました。

別にあってもかまいませんが、どちらにせよactionPerformed()の中で定期的に呼ばれるので、コードを簡略化するためにそうしています。

[転職率95.1%]最短22日で未経験からプログラマーへ『GEEK JOB 転職コース』
geekjob_to_gol_banner_sp_06

『GEEKJOB 転職コース』では未経験からでもプログラミングや仕事の進め方を学習でき、プログラマーとして転職/就職できるまでサポートします。

  • 短期集中のプログラミング学習で未経験から最短22日での転職/就職ができる

  • IT業界の採用を熟知したメンターが就活サポート

  • わからないことは現役プログラマに質問できる

  • オフィスで働く上で必要なスキルを身に付けられる

  • 紹介可能企業は500社以上


文系出身だから、全くプログラミング経験がないから、プログラミングの学習に挫折してしまったから、といった方も関係ありません。

未経験からプログラマーを目指せる環境を用意しています。

詳しく見る

この記事の内容について報告する