【发布时间】:2021-11-20 20:44:20
【问题描述】:
我试图让我的动作更顺畅。当我按下向上键时它会上升,然后当我按下左键时它会停止然后向左转。我想做到,所以当我按右时,它会立即做到,没有延迟。我怎么能用我的代码
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.awt.Image;
import javax.swing.*;
class MyFrame extends JFrame implements KeyListener {
JLabel label;
MyFrame(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addKeyListener(this);
ImageIcon imageIcon = new ImageIcon("C:\\Users\\jacob\\Downloads\\player.png");
Image image = imageIcon.getImage();
Image newimg = image.getScaledInstance(150, 150, java.awt.Image.SCALE_SMOOTH);
imageIcon = new ImageIcon(newimg);
label = new JLabel(imageIcon);
this.add(label);
this.setSize(500, 500);
this.setVisible(true);
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP)
label.setLocation(label.getX(), label.getY()-10);
else if (e.getKeyCode() == KeyEvent.VK_DOWN)
label.setLocation(label.getX(), label.getY()+10);
else if (e.getKeyCode() == KeyEvent.VK_LEFT)
label.setLocation(label.getX()-10, label.getY());
else if (e.getKeyCode() == KeyEvent.VK_RIGHT)
label.setLocation(label.getX()+10, label.getY());
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
}
【问题讨论】:
-
你考虑过使用 Swing Timer 类吗?这可能是您更好的解决方案。
-
尝试像 stackoverflow.com/questions/2623995/… 这样实现它,您将按键存储在一个哈希集中,所以它不能仅在事件之外起作用..
-
不要使用 KeyListener。相反,您应该使用
Key Bindings。请参阅:Motion Using the Keyboard。KeyboardAnimation.java会做你想做的事。
标签: java