我只是随意使用GUI来解决这个问题。当我按下右箭头键时,矩形确实在X轴上移动,但移动的距离不是恒定的。它提升得非常快,每次按下后矩形都会变大在我最近的代码行X=X+1
似乎工作得很好。这是我的代码:
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;
public class Buffer extends JPanel implements KeyListener{
public static JFrame frame;
public int x;
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.red);
g.fillRect(x,0,20,20);
frame.addKeyListener(this);
}
public static void main(String args[]){
Buffer z=new Buffer();
frame=new JFrame();
frame.setSize(500,500);
frame.setVisible(true);
frame.setFocusable(true);
frame.add(z);
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
x=x+1;
repaint();
}
}
}
答案 0 :(得分:1)
从public void paintComponent(Graphics g)
frame.addKeyListener(this);
并将以下行添加到public static void main(String args[])
frame.addKeyListener(z);
问题在于,在每repaint();
个keyPressed
方法之后,paintComponent
方法为您的框架添加了新的KeyListener
。
但是如果你有几个KeyListeners
,那么每个Listener都会为同一个事件调用keyPressed
方法。因此,如果您有5个监听器,并按向右箭头一次,则会调用keyPressed
方法五次,x将增加五。
这意味着矩形随着右箭头的每次击打而移动得更快一些。
答案 1 :(得分:-1)
尝试使用keyReleased
代替keyPressed
。可能是这样,当按下键时,它会不断调用keyPressed
事件。