
javaを勉強している者です。
KeyListenerとActionListenerをインターフェースにして、keyPressedメソッドと、actionPerformedにいくつか機能を実装しているのですが、actionPerformedメソッドが動く前は、keyPressedメソッドがちゃんと動くのですが、actionPerformedメソッドを動かしてからだと、keyPressedが動かなくなる(キーを押しても反応しなくなる)のですが、何かよくある原因というのはあるのでしょうか?(keyPressedのようなメソッドが途中で動かなくなることに)
やはりコードを見ないとなんとも言えないでしょうか?
よろしくお願いします。

No.1ベストアンサー
- 回答日時:
>actionPerformedメソッドを動かしてからだと、keyPressedが動かなくなる(キーを押しても反応しなくなる)
単純な想像ですが・・・。
KeyListenerは、どこに実装していますか? たとえば、Frameなどのウインドウに組み込んでいるのでしょうか。また、ActionListenerはボタンに組み込んでいる、ということじゃないでしょうか。
ボタンをクリックした後、フレームの何もない部分をクリックすると、再度キーイベントが認識されるようになりませんか。
最初に起動した段階では、キーを押すと(何もコンポーネントが選択されていないため)Frame自体にキーイベントが送られKeyListenerが機能する。ボタンをクリックすると、そのボタンが選択された状態になるために、キーイベントが(Frameではなく)ボタンに送られるようになるため、FrameのKeyListenerがキーイベントを受け取れなくなる、というようなことでは・・・と、まったくの想像ですが。
回答ありがとうございます。
KeyListenerはフレームに実装しています。大まかには下記のような感じです。
public class MainPanel extends JPanel implements KeyListener, ActionListener{
public MainPanel(){
addKeyListener(this);
JButton button = new button("");
button.addActionListener(this);
}
}
ボタンにActionListenerを実装して、パネル自体にKeyListenerを実装しています。ボタンをクリックする前は、キーリスナーが動くのですが、ボタンをクリックした後は全くキーを感知していないようなのです。
よろしくお願いします。
No.2
- 回答日時:
/**
左クリックと@キーを同時に連打すると、めちゃめちゃ早くなる。
ちょっとワロタ。
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Suburi extends JFrame implements ActionListener,KeyListener{
private JLabel label;
private JButton button;
private Boolean boo;
private int counter;
public Suburi(){
super("Swing");
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container contentPane = getContentPane();
label = new JLabel("Suburi");
contentPane.add(label,BorderLayout.NORTH);
button = new JButton("Racket");
contentPane.add(button,BorderLayout.SOUTH);
button.addActionListener(this);
button.addKeyListener(this);
boo = false;
counter = 0;
setSize(500,500);
// pack();
}
static public void main(String ... mojiretsu){
Suburi suburi = new Suburi();
suburi.setVisible(true);
}
public void actionPerformed(ActionEvent ae){
if(ae.getSource().equals(button)){
if(boo == false){
label.setText(String.valueOf(counter++));
button.setText("Event Handler!");
boo = true;
}else{
label.setText(String.valueOf(counter++));
button.setText("Event Handler!!");
boo = false;
}
}
}
public void keyPressed(KeyEvent ke){
if(ke.getKeyCode() == KeyEvent.VK_AT){ // @キー
label.setText(String.valueOf(counter++));
button.setText("Event Handler!!!");
}
}
public void keyReleased(KeyEvent ke){}
public void keyTyped(KeyEvent ke){}
}
参考URL:http://www.tohoho-web.com/java/listener.htm
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 15:14
- 臨床心理士・心理カウンセラー・ソーシャルワーカー 心理カウンセラーになるには 1 2023/01/19 15:04
- その他(プログラミング・Web制作) Pythonで複数のメソッドをまとめて管理する方法について 1 2023/03/30 00:01
- PostgreSQL ポストグレにあるExcelファイルを開くには 1 2022/12/13 18:07
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- その他(メールソフト・メールサービス) 【GAS】GMail自動送信 2 2022/09/04 06:19
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
mainメソッドのthrows節で設定...
-
VBAマクロについて教えてく...
-
VisualBasicを使用してのデータ...
-
Javaサーブレットのライフサイ...
-
RequestDispacherインターフェ...
-
関数とメソッドの違い
-
VBAでAccessからExcelのセルフ...
-
Choice・TextArea等をデフォル...
-
ランダム画像のjsをカスタマイ...
-
コマンドプロンプト実行後に画...
-
printStackTrace()メソッドに関...
-
JUnitの仕組みについて
-
配列のメソッド
-
メソッドをstaticにする、しな...
-
DataGridViewでセルクリックイ...
-
javascriptからjavaを呼び出したい
-
0歳児の指しゃぶりに関して
-
タグチメソッドと実験計画法の違い
-
数値を読み込む関数?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
【sendkeysメソッドが動かずに...
-
mainメソッドのthrows節で設定...
-
VBA コピーが出来ません…!
-
DataGridViewでセルクリックイ...
-
コマンドプロンプト実行後に画...
-
0歳児の指しゃぶりに関して
-
エクセルVBAにおけるON TIMEメ...
-
javascriptからjavaを呼び出したい
-
配列のメソッド
-
CALLされていないメソッドを見...
-
final修飾子を使っているのに、...
-
Labelコントロールに数字を代入...
-
VBPをダブルクリックするとたま...
-
ウィンドウを最前面にできません
-
処理内容がほぼ同じメソッドの...
-
Application.Wait の参照設定
-
C#.net Define文
-
C# 演算 最大値 最小値 表現の仕方
-
Excel VBA でExcelを終了したい...
おすすめ情報