Sample : 6.KeyListener
FunctionKeyなど、ボタンとしても機能があるがキーボード操作でも ボタンと同様の機能を実行したい場合の説明です。
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)に指定されたアイテムのボタンコンポーネント)のクリックイベントを パラメータに指定されたファンクションキーに登録します。
[製品LogicClass] jp.ne.mki.wedge.rule.client.component.frame.SetFrameFunctionKeyListener

[製品LogicClass] jp.ne.mki.wedge.rule.client.component.frame.SetFrameKeyListenerExtends

[製品LogicClass] jp.ne.mki.wedge.rule.client.component.frame.SetFunctionKeyMapToButton

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

Afterの実行についての確認をするために、 画面上部には「数値5桁まで」の属性を持つTextFieldを配置しました。
各ロジッククラスの定義は下記のとおりで、 それぞれInにボタンに対応したアイテムを設定してあります。

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

動作の違いを確認する↑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等でデータの整合性を保っているつもりでも それが保障されない可能性があります。
製品では「できるだけ全ての機能はButton等のActionを使用する」事を推奨しますので、 特別な理由が無い限り、もっとも「ボタン操作」に近い動作をする 「ボタンにファンクションキーのマップを追加(SetFunctionKeyMapToButton)」の使用を推奨します。