当按下一个键时改变图片
Making a picture change when a key is pressed
我的键盘按钮目前可以正常工作。我想知道当我按方向键时是否可以在 2 张图片之间切换。我的图片放在一个名为 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);
}
}
}
我用稍微不同的方法解决了这个问题。我认为它可能效率较低,但它确实有效。
我创建了一个
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 在图片之间交替行走。
我的键盘按钮目前可以正常工作。我想知道当我按方向键时是否可以在 2 张图片之间切换。我的图片放在一个名为 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);
}
}
}
我用稍微不同的方法解决了这个问题。我认为它可能效率较低,但它确实有效。 我创建了一个
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 在图片之间交替行走。