为了简短起见,我想让一个 Java 小程序认为当我点击W
、或我实际上分别点击、A
、或时。 S
D
up
down
left
right
我该怎么做呢?
我会制作一个带有激活/停用按钮的简单小 GUI,但我不知道该程序如何欺骗 Java 小程序。
您应该使用键绑定。
本质上,您将一个键“绑定”到一个动作。例如,如果你想将W
键和UP
键绑定到按钮中的“按下”动作,你会写:
button.getInputMap().put(KeyStroke.getKeyStroke("W"), "pressed");
button.getInputMap().put(KeyStroke.getKeyStroke("UP"), "pressed");
并且要定义“按下”应该做什么,您需要添加一个与之对应的动作。
button.getActionMap().put("pressed", changeTextAction);
changeTextAction
应该是扩展的类的实例AbstractAction
。例如:
public class ChangeTextAction extends AbstractAction
{
private JButton button;
private String text;
public ChangeTextAction(JButton button, String text)
{
this.button = button;
this.text = text;
}
@Override
public void actionPerformed(ActionEvent e)
{
button.setText(text);
}
}
这是一个基本程序的示例,它允许用户单击、按下W
或按下UP
以触发将其文本更改为“按下!”的操作:
import javax.swing.*;
import java.awt.event.ActionEvent;
class KeyBindingExample extends JFrame
{
private JButton button;
private Action changeTextAction;
public KeyBindingExample()
{
button = new JButton("Not Pressed!");
changeTextAction = new ChangeTextAction(button, "Pressed!");
button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("W"), "pressed");
button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("UP"), "pressed");
button.getActionMap().put("pressed", changeTextAction);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(button);
pack();
setVisible(true);
}
public class ChangeTextAction extends AbstractAction
{
private JButton button;
private String text;
public ChangeTextAction(JButton button, String text)
{
this.button = button;
this.text = text;
}
@Override
public void actionPerformed(ActionEvent e)
{
button.setText(text);
}
}
public static void main(String[] args)
{
new KeyBindingExample();
}
}
键绑定应该是您所追求的。