1

为了简短起见,我想让一个 Java 小程序认为当我点击W、或我实际上分别点击、A、或时。 SDupdownleftright

我该怎么做呢?

我会制作一个带有激活/停用按钮的简单小 GUI,但我不知道该程序如何欺骗 Java 小程序。

4

2 回答 2

1

您应该使用键绑定

本质上,您将一个键“绑定”到一个动作。例如,如果你想将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();
    }
}
于 2013-01-08T05:40:09.233 回答
0

键绑定应该是您所追求的。

于 2013-01-08T05:16:27.570 回答