Java听按钮和键盘单击

时间:2012-02-16 15:42:58

标签: java swing keyboard jbutton actionlistener

如何按下按键并触发JButton?

例如:

我将“A”JButton作为面板上的GUI。我在“aButton”上实现了一个buttonListener,它会将屏幕更改为其他内容。我想通过鼠标点击和键盘按下来触发此按钮。

如何在实现buttonListener的同时按下键盘上的“a”来触发这个“A”JButton?

我当前的代码无法触发关键事件。

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");
    }
  }
 }

}

3 个答案:

答案 0 :(得分:5)

创建一个动作。然后使用ActionListener将Action添加到按钮。并且您通过将Action绑定到KeyStroke来处理键盘事件。

阅读Swing tutorial。有部分内容:

  1. 如何使用行动
  2. 如何使用键绑定
  3. 让你入门。

    或者您也可以为按钮分配助记符以调用按钮。阅读JButton API。

答案 1 :(得分:1)

还有一种方法可以实现您想要的,只需将注释行添加到您的代码部分。

aButton = new JButton ("A");
aButton.setFont (BUTTON_TEXT);
// Doing this will also allow you to use your Keyboard for this JButton. You have to 
// press ALT+A in this case to make it work.
//aButton.setMnemonic(KeyEvent.VK_A);

如果您只有一个按钮,那么您可以通过这样做将该按钮设为默认的JButton:

yourFrameObject.getRootPane().setDefaultButton(aButton);

现在按下Enter键,它将按照其actionPerformed()方法中的描述进行工作。

注意:默认按钮功能的确切实现取决于外观。例如,在Windows外观中,默认按钮更改为具有焦点的任何按钮,以便按Enter键单击聚焦按钮。当没有按钮具有焦点时,最初指定为默认按钮的按钮将再次成为默认按钮。

答案 2 :(得分:1)

按顺序使用键绑定将enter键与特定组件绑定。 在您的情况下,您可以使用

aButton.getInputMap().put(KeyStroke.getKeyStroke("ENTER"),"pressed");
aButton.getActionMap().put("pressed",btnAction);

其中pressed是一个关键字,用于将特定组件与btnAction链接,后者是对Action的引用。可以使用AbstractAction()创建一个Action,您可以在其中指定要执行的操作。 如果您希望相同的组件响应鼠标单击,您可以使用方法

aButton.addActionListener(btnAction);

由于ActionActionListener界面延伸,因此不会导致问题。