How to listen to key pressed and trigger a JButton?
For example:
I have "A" JButton as the GUI on a panel. I have a buttonListener implemented on "aButton", that will change the screen to something else. I want this button to be triggered by both mouse click and keyboard pressed.
How can I trigger this "A" JButton by pressing "a" on keyboard while having the buttonListener implemented as well?
My current code cannot triggered the key event.
ButtonListener listener;
KeyboardListener keyboardListener;
private JButton aButton;
public MyButtonPanel() {
listener = new ButtonListener();
aButton = new JButton ("A");
aButton.setFont (BUTTON_TEXT);
aButton.setPreferredSize (new Dimension (60,30));
aButton.addActionListener (listener);
aButton.addKeyListener (keyboardListener);
setLayout (new BorderLayout());
add (aButton, BorderLayout.CENTER);
}
private class KeyboardListener implements KeyListener
{
public void keyPressed(KeyEvent arg0) {
char c = arg0.getKeyChar();
System.out.println("Pressed " + c);
}
public void keyReleased(KeyEvent arg0) {
char c = arg0.getKeyChar();
System.out.println("Released " + c);
}
public void keyTyped(KeyEvent arg0) {
char c = arg0.getKeyChar();
System.out.println("Typed " + c);
}
}
private class ButtonListener implements ActionListener {
public void actionPerformed (ActionEvent event) {
Object source = event.getSource();
if (source == aButton) {
System.out.println("This is a");
}
}
}
}
解决方案
Create an Action. Then you add the Action to the button by using an ActionListener. And you handle the keyboard event by binding the Action to a KeyStroke.
Read the Swing tutorial. There are section on:
How to Use Actions
How to Use Key Bindings
to get you started.
Or you can also just assign a mnemonic to the button to invoke the button. Read the JButton API.