Q4-1:確認ダイアログを表示したとき、マウスによるボタンクリックに替えて、テンキーから"1"を押したら[はい]、"2"を押したら[いいえ]というように動作させることはできないか。
A4-1:
キー入力による確認ダイアログの操作についてお答えいたします。
確認ダイアログコンポーネントでダイアログを表示したとき、"1"キーを押すと[はい]ボタンクリック、"2"キーを押すと[いいえ]ボタンクリックと同じ動作を行うように設定することはできませんが、次善の策として、ダイアログコンポーネントを利用することで同等の機能を実現できますので、こちらを提案させていただきます。
キー入力による操作を設定するには、キーイベントハンドラーコンポーネントを利用します。このコンポーネントはフレームやダイアログにショートカットキーを設定するために用いるコンポーネントで、「ダイアログにフォーカスがあるとき、"1"キーを押したらイベント番号1のアクションイベントを発生する」といった設定を行うことができます。(このとき、アクションイベントを発生するのは、ダイアログではなくキーイベントハンドラーです。)
サンプルを2つ用意しましたので、どうぞご覧ください。
これらのサンプルでは、確認ダイアログコンポーネントに替えて、ダイアログ、ラベル、ボタンの各コンポーネントを使って確認ダイアログ相当のウィンドウを作っています。そして、アプリケーション起動時に、キーイベントハンドラーの「キーバインディングを設定する(PFComponent,int,int,int)」メソッドによって、ダイアログにフォーカスがあるとき、"1"キーを押すとイベント番号1、"2"キーを押すとイベント番号2のアクションイベントが発生するように、キーイベントハンドラーを設定しています。
"キーイベント-1.mzax"では、ダイアログ上の[はい]、[いいえ]ボタンをクリックしたときの動作と、キーイベントハンドラーからアクションイベント(イベント番号1および2)が発生したときの動作を一致させるように、接続先のメソッドを個別に記述しています。これだと、機能修正が必要になるごとに、[はい]ボタン、[いいえ]ボタン、キーイベントハンドラーの接続先をそれぞれ修正しなくてはならなくなります。
"キーイベント-2.mzax"では、そのような複数個所の同時修正作業を回避するために、イベント生成コンポーネントを用いて、処理を1箇所にまとめてあります。このようにすることで修正箇所をイベント生成コンポーネントの接続先のみに絞り、修正作業の負荷やミスを低減することができます。
キーイベントハンドラーの使い方につきましては、MZ Platform付属の「サンプル(キーイベントハンドラー).pdf」も合わせてご覧いただくとよろしいかと存じます。
関連ファイル:キーイベント-1.mzax、キーイベント-2.mzax
Q4-2:
キーイベントハンドラーで、「はい」のときはキー1、「いいえ」のときはキー2を押すように設定されているが、テンキーの1および2では何番を指定すればよいか。
A4-2:
通常のキーボード上のキー1および2のコード番号は49および50ですが、テンキー上の1および2のコード番号は97および98となっております。これらの番号につきましては、キーイベントハンドラーのJavadocに記載されております。
Q4-3:
テンキーの1および2のキーを押すことにより、作成した確認ダイアログのボタンを押した際と同様の処理を行うように定義したつもりであるが、うまく動かない。作成中のアプリケーションを送付するのでご助言いただきたい。
A4-3:
キーイベントハンドラーを用いてコンポーネントに対してキー設定を設定した場合、イベントはキーイベントハンドラーからイベント番号付きで発生します。
お送りいただいたアプリケーションでは、ボタン[ID:30]押下時に、イベント生成[ID:70]のメソッドを起動しアクションイベントを発生させておりますが、このメソッドはテンキーの1を押下時にキーイベントハンドラーから発生するアクションイベントの処理として定義されておりますため、不要です。
また、ダイアログ[ID66]の表示と閉じるが逆になっておりますので、ご確認をお願い致します。