如何让一个点上下移动
How to make an point move up and down
我正在尝试在 JFrame
中上下移动简笔画。当我更改 y
时,整个事情都会移动。但我想让它向上移动,等一下,然后向下移动。 Thread.sleep
没有工作。 comp
是一个class画简笔画的对象。
if(key == KeyEvent.VK_UP)
{
comp.setY(y++);
comp.setY(y--);
}
Swing 是一个单线程环境,它的功能也得到了合理的优化。
重绘管理器可能将 repaint
请求压缩为一个请求,因此您只能看到最后一个请求。
有关详细信息,请参阅 Concurrency in Swing。
您 "can" 所做的是推迟第二次更新,使用类似 Swing 的东西 Timer
...
类似...
if(key == KeyEvent.VK_UP)
{
comp.setY(y++);
// You may need to force a repaint here
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
comp.setY(y--);
// You may need to force a repaint here
}
});
timer.setRepeats(false);
timer.start();
}
...例如。
有关详细信息,请参阅 How to use Swing Timers。
就个人而言,我会设置一个 Timer
,它能够根据它携带的状态变量执行上下运动,但我就是这样
我也不鼓励使用 KeyListener
s,因为它们带来的麻烦多于它们的价值,而是鼓励使用键绑定 API,请参阅 How to Use Key Bindings更多详情
我正在尝试在 JFrame
中上下移动简笔画。当我更改 y
时,整个事情都会移动。但我想让它向上移动,等一下,然后向下移动。 Thread.sleep
没有工作。 comp
是一个class画简笔画的对象。
if(key == KeyEvent.VK_UP)
{
comp.setY(y++);
comp.setY(y--);
}
Swing 是一个单线程环境,它的功能也得到了合理的优化。
重绘管理器可能将 repaint
请求压缩为一个请求,因此您只能看到最后一个请求。
有关详细信息,请参阅 Concurrency in Swing。
您 "can" 所做的是推迟第二次更新,使用类似 Swing 的东西 Timer
...
类似...
if(key == KeyEvent.VK_UP)
{
comp.setY(y++);
// You may need to force a repaint here
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
comp.setY(y--);
// You may need to force a repaint here
}
});
timer.setRepeats(false);
timer.start();
}
...例如。
有关详细信息,请参阅 How to use Swing Timers。
就个人而言,我会设置一个 Timer
,它能够根据它携带的状态变量执行上下运动,但我就是这样
我也不鼓励使用 KeyListener
s,因为它们带来的麻烦多于它们的价值,而是鼓励使用键绑定 API,请参阅 How to Use Key Bindings更多详情