プロが教える店舗&オフィスのセキュリティ対策術

javaを勉強している者です。

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

やはりコードを見ないとなんとも言えないでしょうか?

よろしくお願いします。

A 回答 (2件)

>actionPerformedメソッドを動かしてからだと、keyPressedが動かなくなる(キーを押しても反応しなくなる)



単純な想像ですが・・・。

KeyListenerは、どこに実装していますか? たとえば、Frameなどのウインドウに組み込んでいるのでしょうか。また、ActionListenerはボタンに組み込んでいる、ということじゃないでしょうか。

ボタンをクリックした後、フレームの何もない部分をクリックすると、再度キーイベントが認識されるようになりませんか。

最初に起動した段階では、キーを押すと(何もコンポーネントが選択されていないため)Frame自体にキーイベントが送られKeyListenerが機能する。ボタンをクリックすると、そのボタンが選択された状態になるために、キーイベントが(Frameではなく)ボタンに送られるようになるため、FrameのKeyListenerがキーイベントを受け取れなくなる、というようなことでは・・・と、まったくの想像ですが。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
KeyListenerはフレームに実装しています。大まかには下記のような感じです。

public class MainPanel extends JPanel implements KeyListener, ActionListener{
public MainPanel(){
addKeyListener(this);
JButton button = new button("");
button.addActionListener(this);
}
}

ボタンにActionListenerを実装して、パネル自体にKeyListenerを実装しています。ボタンをクリックする前は、キーリスナーが動くのですが、ボタンをクリックした後は全くキーを感知していないようなのです。

よろしくお願いします。

お礼日時:2007/08/30 20:33

/**


左クリックと@キーを同時に連打すると、めちゃめちゃ早くなる。

ちょっとワロタ。

*/
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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!