Sample : 6.KeyListener

FunctionKeyなど、ボタンとしても機能があるがキーボード操作でも ボタンと同様の機能を実行したい場合の説明です。

1.3種類のKeyboardショートカット対応ロジッククラスの紹介
2.各種KeyListener系のロジッククラスの使用方法
3.動作の違いを確認する

3種類のKeyboardショートカット対応ロジッククラスの紹介↑top

Key操作による特定機能へのショートカットを実現することができるロジッククラスは 以下の三つ存在します。それぞれJavaDocの説明を引用してあります。

  • ファンクションキーイベント設定(SetFrameFunctionKeyListener)
    FunctionKeyを押したときにinRecordで設定されたItemの before、afterイベントを発生するようになります。 必ずonLoad時に設定して下さい。in=複数、out=0。
  • キーリスナー設定(After実行)(SetFrameKeyListenerExtends)
    パラメータに指定された modifier + key の キー(それぞれのKey番号をセミコロンで区切って指定)が入力され離された タイミングにて、入力引数に設定されたITEMのBefore,Afterを実行します。 このロジッククラスはカレントコンポーネントのAfter処理を行ってから 実行されます。
  • ボタンにファンクションキーのマップを追加(SetFunctionKeyMapToButton)
    In(0)に指定されたアイテムのボタンコンポーネント)のクリックイベントを パラメータに指定されたファンクションキーに登録します。

各種KeyListener系のロジッククラスの使用方法↑top

これらの3種類のKeyListener系のロジッククラスの動作の違いを確認するための Applicationを作成して見ます。 下記のような画面で、「F1」「F2」「F3」をClickした場合にそれぞれ「**の機能実行」 というDialogを表示する仕様で、F1からF3のKeyをそれぞれ下記のように設定します。
またキーリスナー設定(After実行)(SetFrameKeyListenerExtends)については操作キーの設定が「Modifier+KeyCode」 という仕様ですので注意が必要です。

./images/02.jpg

Afterの実行についての確認をするために、 画面上部には「数値5桁まで」の属性を持つTextFieldを配置しました。

各ロジッククラスの定義は下記のとおりで、 それぞれInにボタンに対応したアイテムを設定してあります。

./images/01.jpg

画面LoadのタイミングでそれぞれのKeyListener系のロジッククラスを実行しています。 このようにKeyListener系のロジッククラスは画面Load時に実行する必要があります。

./images/03.jpg

動作の違いを確認する↑top

まずはTextFieldに何も入力せず、FocusもTextFieldにあてた状態で F1からF3のKeyを押下したときの動作の結果を確認します。

  • F1
    「F1の機能実行」Dialogが表示され、FocusはTextFieldのまま。
  • F2
    「F2の機能実行」Dialogが表示され、FocusはTextFieldのまま。
  • F3
    「F3の機能実行」Dialogが表示され、FocusはF3へ移動。

F3のみ「FocusがF3ボタンに移動する」という動作の違いがあります。 このように、ボタンにファンクションキーのマップを追加(SetFunctionKeyMapToButton)の場合は「ボタンをClickした」とほぼ同じ動作になります。

次に、TextFieldに「A」などチェックエラーになる値を入力して、 F1からF3のKeyを押下したときの動作の結果を確認します。

  • F1
    「F1の機能実行」Dialogが表示され、FocusはTextFieldのまま。
  • F2
    「数値以外の値が入力されています」ErrorDialogが表示され、 FocusはTextFieldのまま。
  • F3
    「数値以外の値が入力されています」ErrorDialogが表示され、 FocusはTextFieldのまま。

F1押下時のみチェック機能が動作していないのが確認できます。 このように、ファンクションキーイベント設定(SetFrameFunctionKeyListener)の場合は「Afterが実行されない」ために、 標準チェックやAfterEvent等でデータの整合性を保っているつもりでも それが保障されない可能性があります。

■Point
製品では「できるだけ全ての機能はButton等のActionを使用する」事を推奨しますので、 特別な理由が無い限り、もっとも「ボタン操作」に近い動作をする 「ボタンにファンクションキーのマップを追加(SetFunctionKeyMapToButton)」の使用を推奨します。

Valid XHTML 1.1