【问题标题】:Making a picture change when a key is pressed按键时改变图片
【发布时间】:2019-12-11 16:58:16
【问题描述】:

我目前的键盘按钮可以正常工作。我想知道当我按方向键时是否可以在两张图片之间切换。我的图片被放在名为 thing 的 JLabel 中。 JLabel 正在移动,我需要做的就是让它在按下键时交替显示图片。

class start {

start() {
    JFrame mainFrame = new JFrame();
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainFrame.setSize(1210, 700);
    mainFrame.setLocation(new java.awt.Point(150, 30));
    mainFrame.setLayout(null);
    mainFrame.setFocusable(true);
    mainFrame.setFocusTraversalKeysEnabled(true);
    mainFrame.setIconImage(new ImageIcon("images\\sword.png").getImage());
    JLabel thing = new JLabel();
    thing.setIcon(new ImageIcon("image\\walkdown.png"));
    thing.setBounds(300, 300, thing.getPreferredSize().width, thing.getPreferredSize().height);

    InputMap inputMap = thing.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    ActionMap actionMap = thing.getActionMap();

    inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0, false), "move.up");
    inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_W, 0, false), "move.up");
    inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0, false), "move.down");
    inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_S, 0, false), "move.down");
    inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0, false), "move.left");
    inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, 0, false), "move.left");
    inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0, false), "move.right");
    inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_D, 0, false), "move.right");

    actionMap.put("move.up", new ThingAction(thing, new Point(0, -5)));



    actionMap.put("move.down", new ThingAction(thing, new Point(0, 5)));
    actionMap.put("move.left", new ThingAction(thing, new Point(-5, 0)));
    actionMap.put("move.right", new ThingAction(thing, new Point(5, 0)));

    mainFrame.add(thing);
    mainFrame.setVisible(true);
}

public class ThingAction extends AbstractAction {

    private JLabel thing;
    private Point delta;

    public ThingAction(JLabel thing, Point delta) {
        this.thing = thing;
        this.delta = delta;
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        thing.setLocation(thing.getX() + delta.x, thing.getY() + delta.y);
    }
}

}

【问题讨论】:

  • "我想知道我是否可以将图片从 1 更改为 1 和返回..." 一个到什么?请写完整的句子。否则很难说出你在问什么。
  • 哪张照片?依附于什么?什么时候改?
  • @PM77-1 我添加了更多细节。但是我的图片被添加到 JLabel 中,我希望它在按下键盘上的方向键时改变。图片只是一个简单的png。
  • 那么,你想在walkdown.png 和其他一些人之间切换吗?

标签: java keyboard


【解决方案1】:

我通过使用稍微不同的方式解决了这个问题。我认为它可能效率较低,但它有效。 我创建了一个

void keylisteners() {
        MainFrame.addKeyListener(new java.awt.event.KeyListener() {
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_W) {
                    if (walking == true && direction != 0) {
                        MT.cancel();
                    }

public void keyTyped(KeyEvent e) {
            }

            public void keyReleased(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_W) {
                    if (direction == 0) {
                        thing.setIcon(new ImageIcon("images\\walk0b.png"));
                        MT.cancel();
                    }
                }

因此,当按下键时,会弹出一个图像,并在其释放时发生变化。我的方向也是一个变量,我创建了一个变量,用于在图片之间进行更改,以使其就像 cahrecter 通过在图片之间来回移动一样。

【讨论】:

    猜你喜欢
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 2013-12-08
    相关资源
    最近更新 更多