如何按下按键并触发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");
}
}
}
}
答案 0 :(得分:5)
创建一个动作。然后使用ActionListener将Action添加到按钮。并且您通过将Action绑定到KeyStroke来处理键盘事件。
阅读Swing tutorial。有部分内容:
让你入门。
或者您也可以为按钮分配助记符以调用按钮。阅读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);
由于Action
从ActionListener
界面延伸,因此不会导致问题。