![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
javaを勉強している者です。
KeyListenerとActionListenerをインターフェースにして、keyPressedメソッドと、actionPerformedにいくつか機能を実装しているのですが、actionPerformedメソッドが動く前は、keyPressedメソッドがちゃんと動くのですが、actionPerformedメソッドを動かしてからだと、keyPressedが動かなくなる(キーを押しても反応しなくなる)のですが、何かよくある原因というのはあるのでしょうか?(keyPressedのようなメソッドが途中で動かなくなることに)
やはりコードを見ないとなんとも言えないでしょうか?
よろしくお願いします。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_03.png?e8efa67)
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
コマンドプロンプト実行後に画...
-
ウィンドウを最前面にできません
-
Labelコントロールに数字を代入...
-
DataGridViewでセルクリックイ...
-
mainメソッドのthrows節で設定...
-
メソッドをstaticにする、しな...
-
配列のメソッド
-
C# iTunes で プレイリスト選択...
-
Excel VBA シェイプの原型のサ...
-
Application.Wait の参照設定
-
JTable TableChangedメソッド
-
return文について質問
-
Excel VBA でExcelを終了したい...
-
Vectorについて
-
【sendkeysメソッドが動かずに...
-
worksheets & rows メソッドは...
-
C# ステップインの動作について
-
JSPのメソッドサイズ制限について
-
AccessレポートのラベルをVBAで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
DataGridViewでセルクリックイ...
-
final修飾子を使っているのに、...
-
javascriptからjavaを呼び出したい
-
Labelコントロールに数字を代入...
-
VBPをダブルクリックするとたま...
-
vbaエクセルマクロ RemoveDupli...
-
【sendkeysメソッドが動かずに...
-
mainメソッドのthrows節で設定...
-
エクセルVBAにおけるON TIMEメ...
-
Refreshメソッドの使い方
-
onClickで関数呼出し後に、結果...
-
ウィンドウを最前面にできません
-
JSPで<SELECT>の中にDBから持っ...
-
コマンドプロンプト実行後に画...
-
Application.Wait の参照設定
-
Excel VBA でExcelを終了したい...
-
配列のメソッド
-
エクセルのマクロでプリンタを...
-
Excel VBA シェイプの原型のサ...
おすすめ情報