EnterKeyに反応するButtonを配置する
JButtonにActionListenerを登録したプログラムで、ButtonにFocusが当たっている時、EnterKeyを押しても反応しません。
つまり、EnterKeyを押してもActionEventは発生しません。
KeyListenerインターフェースを実装し、KeyEventをハンドルすれば、EnterKeyを感知できます。
sampleでは、KeyEventのリスナーとして、KeyListenerインターフェースのメソッドを空で実装した抽象クラスである
KeyAdapterクラスを継承しています。
Adapterクラスを使えば、インターフェースを実装する時のようにインターフェースの持つ全てのメソッドを定義する必要がなく、
自分が必要なメソッドだけを実装すれば良いからです。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class ExamJButtonEnter extends JFrame {
JButton jb1, jb2;
JPanel jp;
public static void main(String args[]) {
ExamJButtonEnter ejbe = new ExamJButtonEnter();
ejbe.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
ejbe.setBounds(20,50,300,200);
ejbe.setVisible(true);
}
ExamJButtonEnter() {
super("Button click");
jb1 = new JButton("Green");
jb2 = new JButton("Yellow");
// create ActionListener
ExamActionListener eal = new ExamActionListener();
// set actionListener to JButton
jb1.addActionListener(eal);
jb2.addActionListener(eal);
// create KeyListener
ExamKeyAdapter eka = new ExamKeyAdapter();
// set KeyListener to JButton
jb1.addKeyListener(eka);
jb2.addKeyListener(eka);
jp = new JPanel();
jp.add(jb1);
jp.add(jb2);
getContentPane().add(jp, BorderLayout.SOUTH);
}
class ExamActionListener implements ActionListener {
public void actionPerformed(ActionEvent ae) {
if(ae.getSource() == jb1) {
jp.setBackground(Color.green);
}
if(ae.getSource() == jb2) {
jp.setBackground(Color.yellow);
}
}
}
class ExamKeyAdapter extends KeyAdapter {
public void keyPressed(KeyEvent ke) {
if(ke.getKeyCode() == KeyEvent.VK_ENTER) {
System.out.println("Pressed Enter");
}
if(ke.getSource() == jb1) {
jp.setBackground(Color.green);
}
if(ke.getSource() == jb2) {
jp.setBackground(Color.yellow);
}
}
}
}
}
|
![]() |
プログラムを起動した状態の画面です。 |
|
![]() |
Greenボタンにfocusがあり、 Enterを押した場合。 コンソールにPressed Enterと表示されます。 |
|
![]() |
Yellowボタンにfocusがあり、 Enterを押した場合。 コンソールにPressed Enterと表示されます。 |
keyTyped() method
EnterKeyではkeyTyped()メソッドは呼び出されません。文字入力があった場合に呼び出されます。
sampleでは記述していません。
keyPressed() method
ユーザーがキーを押すと呼び出され、何が押されたかの情報をKeyEventクラスのgetKeyCode()メソッドで入手します。
keyReleased() method
ユーザーがキーを放すと呼び出されますが、sampleでは記述していません。