我想制作一个有这些目标的计划:
1)制作JButton 2)使用KeyBindings将按钮连接到一个键(“A”键) 3)单击“A”时执行一些代码
这是我到目前为止的代码:
// Imports
Public class Test{
JButton button = new JButton();
//...
Test(){
button.getInputMap().put(KeyStroke.getKeyStroke("A"), "Pressed");
//...
}
// Where do I add the code that responds when button is pressed?
}
现在,在按下按钮时,我在哪里添加我希望它执行的代码?
答案 0 :(得分:6)
我能想到的两种方式:
doClick()
即可。 KeyBindingEg.java
import java.awt.event.*;
import javax.swing.*;
public class KeyBindingEg extends JPanel {
private JButton btnA = new JButton();
public KeyBindingEg() {
Action btnAction = new ActionOne("A");
Action keyBindingAction = new ActionTwo();
int condition = JLabel.WHEN_IN_FOCUSED_WINDOW;
InputMap inputmap = btnA.getInputMap(condition);
ActionMap actionmap = btnA.getActionMap();
final String aKeyPressed = "a key pressed";
inputmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, 0), aKeyPressed );
actionmap.put(aKeyPressed, keyBindingAction);
// actionmap.put(aKeyPressed, btnAction); // one or the other, your choice
btnA.setAction(btnAction);
add(btnA);
}
private class ActionOne extends AbstractAction {
public ActionOne(String text) {
super(text);
}
@Override
public void actionPerformed(ActionEvent e) {
sharedMethod();
}
}
private class ActionTwo extends AbstractAction {
@Override
public void actionPerformed(ActionEvent e) {
btnA.doClick();
}
}
private void sharedMethod() {
System.out.println("Method called by either key bindings or action listener");
}
private static void createAndShowGui() {
JFrame frame = new JFrame("KeyBindingEg");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new KeyBindingEg());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
答案 1 :(得分:3)
您需要添加一个动作侦听器,特别针对actionPerformed。在构造函数中的某处声明:
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.KeyStroke;
public class Main {
public static void main(String[] argv) throws Exception {
JButton component = new JButton();
MyAction action = new MyAction();
component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("F2"),
action.getValue(Action.NAME));
}
}
class MyAction extends AbstractAction {
public MyAction() {
super("my action");
}
public void actionPerformed(ActionEvent e) {
//Here goes the code where the button does something
System.out.println("hi");//In this case we print hi
}
}
在这个例子中,如果我们按F2,它将相当于按下按钮。