キーリスナーが上手く使えないでいます。
Ctrl キーとボタンを押せばそれぞれのメッセージが出るようなプログラムを次のように作ります。
import java.awt.*;
import java.awt.event.*;
public class KL extends Frame implements KeyListener, MouseListener
{ KL()
{ setLayout(null);
setBounds(400,400,100,100);
addKeyListener(this);
addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});
Button b=new Button();
b.setBounds(25,50,50,20);
b.addMouseListener(this);
// add(b);
setVisible(true);
}
public void keyPressed(KeyEvent e)
{ if(e.getKeyCode()==17)
{System.out.println("Ctrl キーが押されました。");
}
}
public void mouseClicked(MouseEvent e)
{ System.out.println("ボタンがクリックされました。");
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public static void main(String args[])
{ KL k_listener=new KL();
}
}
このプログラムでは、ダブルのスラッシュを附けてボタンの貼り附けを止めています。この形で実行すればキーリスナーは働くのです。しかしスラッシュを取ってボタンを貼り附けると、マウスリスナーだけが有効になってキーリスナーは失効します。両立しません。リスナーを二つの内部クラスに分けて使うなど多少の工夫はしてみましたが、上手く行きません。
どうすれば両方のリスナーが使えるようになるでしょうか。
No.1ベストアンサー
- 回答日時:
>addKeyListener(this);
となっているから、キーリスナーはFrameに対して行っていますね。
ボタンを張るとフォーカスがフレームからボタンに移りますので、キーはボタンに対して行われるためイベントを受け取れないのだと思います。
ボタンに対してキーリスナーを追加すれば解決すると思います。
迅速かつ明快な回答有難うごさいました。早速書き換えて実行しましたところ、見事に両メッセージがコマンドプロンプトに出力されました。感謝します。
実は今19音階の鍵盤楽器を(自分の楽しみの為に)作っています。普通12個の鍵が並んで1オクターブになりますが、それが19個あるのです。音は上手く出ました。しかし1オクターブでは音域が狭すぎます。と言って 19×2+1=39 個の鍵を並べて2オクターブにすれば、帯を解いたようになってしまいます。そこで Ctrl キーを押しながら鍵を押せば倍音が出るようにしようと考えて実行しました所、キーリスナーが効かなかったのです。
多少面倒ではありますが全ての鍵にキーリスナーを附けることに致します。首尾良く2オクターブ出ることと存じます。有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java final 1 2022/06/10 22:49
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java eclipse実行ができない 2 2022/07/27 04:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ボタンの複数割り当てについて
-
【Java】画像表示が出来ない!
-
Javaでタイマーの使い方
-
大量のデータを読み込んで表示...
-
Thread.sleepのInterruptedExce...
-
java のstruts1.3です。
-
C#で、あるクラスのメンバーす...
-
C# DataGridView列カスタマイズ
-
C#でキーイベントが発生しない...
-
C#で別のFormへ複数の値を返そ...
-
C# 矢印キーの取得
-
JavaFXでの表内のチェックボッ...
-
C#でのWNetAddConnection3の使...
-
ループ処理の際、最後だけ","を...
-
C言語のポインターに関する警告
-
System.out.printlnの意味がよ...
-
Javaで改行などが出来ないのです。
-
System.err. printlnとSystem.o...
-
eclipseに記述したjavaファイル...
-
Java配列でNullPointerExceptio...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
Junitテストでvoid戻り値メッソ...
-
C#で、あるクラスのメンバーす...
-
C#でのWNetAddConnection3の使...
-
C# visibleプロパティをfalseに...
-
unityでのC++エラーの原因がわ...
-
ボタンの複数割り当てについて
-
C#で別のFormへ複数の値を返そ...
-
エンターキーを押すとOKボタン...
-
LVM_SETITEMSTATEでListViewの...
-
ユーザーコントロールを動的に...
-
[C#.net]スレッド化された別フ...
-
C# 矢印キーの取得
-
C#から、C++で作成したdll内の...
-
C# DataGridView列カスタマイズ
-
C#でキーイベントが発生しない...
-
Thread.sleepのInterruptedExce...
-
C#でのオブジェクトのコピーに...
-
C# 半角カナの文字化けについて
-
文字列の置換
おすすめ情報