モジュール java.desktop
パッケージ java.awt.event

クラスKeyEvent

java.lang.Object
すべての実装されたインタフェース:
Serializable
直系の既知のサブクラス:
MenuKeyEvent

public non-sealed class KeyEvent extends InputEvent
コンポーネント内でキー・ストロークが発生したことを示すイベントです。

この低レベルのイベントは、キーを押したり(キー・プレス)、離したり(キー・リリース)、入力した(キー・タイプ)ときに、コンポーネント・オブジェクト(テキスト・フィールドなど)によって生成されます。 イベントは、そのコンポーネントのaddKeyListenerメソッドを使ってこれらのイベントを受け取るように登録されている、すべてのKeyListenerまたはKeyAdapterオブジェクトに渡されます。 (KeyAdapterオブジェクトはKeyListenerインタフェースを実装します。) 各リスナー・オブジェクトは、イベントが発生したときにこのKeyEventを取得します。

「キー・タイプ」イベントは、ほかの2つのイベントと比べてレベルの高いイベントであり、プラットフォームやキーボードの配置には依存しません。 これらはUnicode文字が入力されたときに生成され、文字入力の検出で推奨される方法です。 もっとも単純な例としては、「a」などの一度のキー・プレスでキー・タイプ・イベントが発生します。 しかし、一連のキー・プレス('shift' +'a' など)で文字を作ることがよくあります。また、キー・プレス・イベントからキー・タイプ・イベントへのマッピングは、多対1または多対多になる場合があります。 キー・リリースは通常キー・タイプ・イベントを生成する必要はありませんが、キーがリリースされるまでキー・タイプ・イベントが生成されないケースがあります(WindowsでASCIIシーケンスをAlt-テンキー方式で入力するなど)。 アクション・キー、修飾キーなどUnicode文字を生成しないキーでは、キー・タイプ・イベントは発生しません。

getKeyCharメソッドは常に有効なUnicode文字またはCHAR_UNDEFINEDを返します。 文字入力はKEY_TYPEDイベントによって報告されます。KEY_PRESSEDおよびKEY_RELEASEDイベントは必ずしも文字入力に関連付けられていません。 そのため、getKeyCharメソッドの結果は、KEY_TYPEDイベントに対してのみ有効です。

キー・プレスおよびキー・リリース・イベントに対しては、getKeyCodeメソッドはイベントのkeyCodeを返します。 キー・タイプ・イベントに対しては、getKeyCodeメソッドは常にVK_UNDEFINEDを返します。 getExtendedKeyCodeメソッドは、多くのインターナショナル・キーボードの配置でも使用できます。

「キー・プレス」および「キー・リリース」イベントは、「キー・タイプ」イベントより低レベルのイベントであり、プラットフォームおよびキーボードの配置によって異なります。 これらのイベントは、キーを押したとき、または離したときに発生します。文字入力が発生しないキー(アクション・キー、修飾キーなど)についての状態を知るには、これらのイベントに依存するしか方法はありません。 押されているキーや離されているキーは、getKeyCodeメソッドおよびgetExtendedKeyCodeメソッドによって取得できます。これらのメソッドは、仮想キー・コードを返します。

仮想キー・コードは、1つ以上のキー・ストロークの組み合わせによって生成された文字(たとえば、Shiftキーと「a」キーで「A」が生成されます)ではなく、キーボード上のどのキーが押されたのか、または離されたのかを報告するために使用されます。

たとえば、Shiftキーを押すとVK_SHIFTキー・コードでKEY_PRESSEDイベントが発生し、「a」キーを押すとVK_AというkeyCodeが発生します。 「a」キーを離すとVK_AでKEY_RELEASEDイベントが発生します。 これとは別にkeyChar値「A」でKEY_TYPEDイベントが生成されます。

キーボードのキーを押してから離すと、次に示すキー・イベントが順に生成されます

    KEY_PRESSED
    KEY_TYPED (is only generated if a valid Unicode character could be generated.)
    KEY_RELEASED
 
ただし、場合によっては(オートリピート・メソッドやオートインプット・メソッドがアクティブになっている場合など)、順序が異なることやプラットフォームに依存することがあります。

ノート:

  • アクション・キーのF1やHELPなど、Unicode文字が生成されないキーの組み合わせでは、KEY_TYPEDイベントは発生しません。
  • すべてのキーボードまたはシステムが、すべての仮想キー・コードを発生できるわけではありません。 Javaでは、こうしたキーを人為的に生成する試みはされていません。
  • 仮想キー・コードは物理的なキーを識別するものではなく、プラットフォームやキーボードの配置により異なります。 たとえば、米国語仕様キーボード配置を使用した場合にVK_Qを生成するキーは、フランス語仕様キーボード配置を使用した場合にはVK_Aを生成します。
  • 米国語仕様キーボード配置を使用した場合にVK_Qを生成するキーは、ロシア語やヘブライ語の配置でも独自のコードを生成します。 その他の配置では、これらおよびその他の多くのコードにVK_定数はありません。 これらのコードはgetExtendedKeyCodeを使用して取得でき、VK_定数が使用されるときに使用されます。
  • すべての文字にキー・コードが関連付けられているわけではありません。 たとえば、疑問符がプライマリ・レイヤーに表示されるキーボードはないため、疑問符のキー・コードはありません。
  • プラットフォームに依存しないアクション・キーの取扱いをサポートするために、Javaプラットフォームでは、いくつかの追加の仮想キー定数を使用します(使用しない場合は、仮想キー・コードおよび修飾子を解釈することで認識する必要があります)。 たとえば、日本語版Windowsのキーボードでは、VK_CONVERTとALT修飾子の代わりにVK_ALL_CANDIDATESが返されます。
  • Focus Specificationに規定されているように、デフォルトではキー・イベントはフォーカス所有者にディスパッチされます。

警告: Java言語で定義されているキー(VK_ENTER、VK_BACK_SPACE、VK_TAB)を除き、VK_定数の値に頼らないでください。 プラットフォーム・ワードは、将来、より広範なキーボードに対応するために、これらの値を必要に応じて変更する権利を留保します。

特定のKeyEventインスタンスのidパラメータがKEY_FIRSTからKEY_LASTまでの範囲にない場合に、未指定の動作が発生します。

導入されたバージョン:
1.1
関連項目: