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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと タイムマシンを破壊すべきか。
これはディベートの論題だと仮定したうえでの回答お願いします。あなたは、その末にタイムマシンを壊してしまうのか、使い道を探すのかどうかを考えてもらいたいです。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
KeyListenerの使い方について
Java
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
Labelコントロールに数字を代入...
-
エクセルVBAにおけるON TIMEメ...
-
Javaのクラスのstaticメソッド...
-
オートシェイプの位置がずれる...
-
VBA コピーが出来ません…!
-
VBAでAccessからExcelのセルフ...
-
配列のメソッド
-
Refreshメソッドの使い方
-
シリアル通信の方法(VB)
-
ByteArrayOutputStreamでの出力...
-
BasicDataSourceについて
-
双曲線タンジェントの計算
-
&(半角アンド)を扱うには?
-
アクセスVBA 時間を止める
-
VB.NET2017 の IntelliSense に...
-
「タイプ初期化子が例外をスロ...
-
staticと+=の意味を・・・
-
VBA 同じ名前のオブジェクトを...
-
同一パッケージにあるクラスが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
コマンドプロンプト実行後に画...
-
DataGridViewでセルクリックイ...
-
Labelコントロールに数字を代入...
-
エクセルVBAにおけるON TIMEメ...
-
javascriptからjavaを呼び出したい
-
mainメソッドのthrows節で設定...
-
Refreshメソッドの使い方
-
配列のメソッド
-
final修飾子を使っているのに、...
-
VBPをダブルクリックするとたま...
-
ウィンドウを最前面にできません
-
JSPで<SELECT>の中にDBから持っ...
-
【sendkeysメソッドが動かずに...
-
Excel VBA でExcelを終了したい...
-
VB.netで、シリアル通信のタイ...
-
Application.Wait の参照設定
-
Excel VBA シェイプの原型のサ...
-
onClickで関数呼出し後に、結果...
-
drawStringで文字間隔の調整
おすすめ情報