• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:キーリスナー)

キーリスナーが使えない問題

このQ&Aのポイント
  • キーリスナーが上手く使えないでいます。Ctrl キーとボタンを押せばそれぞれのメッセージが出るようなプログラムを作成しましたが、マウスリスナーとキーリスナーが同時に機能しない問題が発生しています。
  • このプログラムでは、ダブルのスラッシュを附けてボタンの貼り附けを止めています。この形で実行すればキーリスナーは働くのです。しかしスラッシュを取ってボタンを貼り附けると、マウスリスナーだけが有効になってキーリスナーは失効します。両立しません。
  • リスナーを二つの内部クラスに分けて使うなど多少の工夫はしてみましたが、上手く行きません。どうすれば両方のリスナーが使えるようになるでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.1

>addKeyListener(this); となっているから、キーリスナーはFrameに対して行っていますね。 ボタンを張るとフォーカスがフレームからボタンに移りますので、キーはボタンに対して行われるためイベントを受け取れないのだと思います。 ボタンに対してキーリスナーを追加すれば解決すると思います。

noname#15728
質問者

お礼

 迅速かつ明快な回答有難うごさいました。早速書き換えて実行しましたところ、見事に両メッセージがコマンドプロンプトに出力されました。感謝します。  実は今19音階の鍵盤楽器を(自分の楽しみの為に)作っています。普通12個の鍵が並んで1オクターブになりますが、それが19個あるのです。音は上手く出ました。しかし1オクターブでは音域が狭すぎます。と言って 19×2+1=39 個の鍵を並べて2オクターブにすれば、帯を解いたようになってしまいます。そこで Ctrl キーを押しながら鍵を押せば倍音が出るようにしようと考えて実行しました所、キーリスナーが効かなかったのです。  多少面倒ではありますが全ての鍵にキーリスナーを附けることに致します。首尾良く2オクターブ出ることと存じます。有難うございました。