キーボードからの入力を処理するメソッドは次の2つです。
| メソッド名 | 機能 |
|---|---|
| keyDown(Event,int) | キーボードのキーが押された時の処理 |
| keyUp(Event,int) | キーボードのキーが放された時の処理 |
これらのメソッドは キーボードのキーが操作された時、自動的に呼び出されます。 通常のキーボード・イベントの処理は keyDown() だけで十分でしょう。 keyUp() はいつも必要なわけではなく、 たとえばゲームプログラムなどで、 より細かいコントロールのために用意されたメソッドと考えてください。 メソッドの型は boolean、最初の引数は Event クラスのオブジェクトです。 2番目の引数で渡されるのは、キーのコードです。 マシンに依存しない Java言語では、 キーの物理的な位置を認識することはできません。 キーの識別は論理的なキー・コードのみを頼りとします。 普通の文字やリターンキー、バックスペースキー、ctrl+C など 1バイトのアスキーコードが割り当てられたキーの場合、 そのコードの値が int型のデータとして渡されます。 同じ特殊キーでもカーソル移動キーやファンクション・キーなどは、 1バイトのキーコードには対応していません。 これらのキーの場合は、 Eventクラスで独自に定義された staticな int型の定数値が渡されます。 (詳しくは Eventクラスの解説 を参照) 次の例のように使用します。
public void keyDown( Event evt, int key ) {
switch( key ) {
case 003: // ctrl + C
case 010: // バックスペース・キー
case '\n': // リターン・キー
case Event.RIGHT: // 右へのカーソル移動キー
case Event.F1: // F1キー
:
}
Eventクラスには、
シフト・キー、コントロール・キー、
メタ・キーなどとの組み合わせを判別するメソッドも用意されています。
ただし、これらのメソッドはキーの判別のために
存在するわけではありません。
大文字や ctrl+C などはキー・コードだけで判定されます。
(シフト・キーが押された状態で Cのキーを押されれば、
キーの値は大文字の 'C ' です。
コントロール・キーが押された状態で Cのキーが押されれば、
キーの値は ctrl+C を表す数値 3です。)
シフト・キーやコントロール・キーの判定は、
むしろマウス操作との組み合わせの処理で利用されます。
public void mouseDrag( Event evt, int x, int y ) {
if( evt.controlDown() ) {
// コントロール・キーを押しながらのドラッグの処理
}
else if( evt.shiftDown() ) {
// シフト・キーを押しながらのドラッグの処理
}
:
キーボード・フォーカスのメソッド
ウィンドウ・システムでは 複数のアプリケーションが同時に起動されています。 しかしキーボードは1つしか存在しません。 このため、どのウィンドウに対してキー入力のイベントを送るかを 管理する必要があります。これが「キーボード・フォーカス」です。 Appletクラスにはキーボードフォーカスを要求したり、 キーボード・フォーカスの変更に伴う処理を行ったりする メソッドが用意されています。
| メソッド名 | 機能 |
|---|---|
| gotFocus() | キーボード・フォーカスが獲得できた時の処理 |
| lostFocus() | キーボード・フォーカスが失われた時の処理 |
| requestFocus() | キーボード・フォーカスを要求する |
gotFocus()とlostFocus()の2つのメソッドは、
システムによってキーボード・フォーカスが
与えられた時および失われた時に自動的に呼び出されます。
キーボード・フォーカスの有無を表示に反映させたいようなケースでは、
これらのメソッドを利用します。
(キーボードのイベント処理で、いつも必要になるわけではありません。)
requestFocus() は明示的にキーボード・フォーカスを要求するための
メソッドで、イベント処理のメソッド群とは扱いが異なります。
mouseEnter() かあるいは mouseDown()
のメソッドの中から呼び出してください。
requestFocus() はあくまでも要求を行うものですから、
requestFocus() を呼び出せば絶対フォーカスを得られるという保証はありません。
逆にウィンドウ・システムのポリシーにしたがって、
ブラウザの側で面倒をみてくれるのが普通です。
そのため通常は
requestFocus() なしでもキーボードのイベント処理は実現できます。