【发布时间】:2019-04-04 09:36:06
【问题描述】:
我正在尝试制作一个 Serpents 和 Ladders Java 应用程序,并且我想让 jLabels 移动。我希望玩家水平移动然后垂直移动,但是当我这样做时,它们会同时发生。如何让第二个计时器(垂直)等待水平停止。这是简化的代码。
private void mover(javax.swing.JLabel label,boolean inv,boolean y){
ActionListener a = new ActionListener() {
int timesq = 40;
int delta = 1;
int deltax = 0;
@Override
public void actionPerformed(ActionEvent e) {
if (inv){
delta = -1;
}
if (y){
deltax = 1;
}
int x = label.getX() + delta;
int y = label.getY() + deltax;
label.setLocation(x, y);
label.setText(String.valueOf(x));
repaint();
if (--timesq <= 0){
Timer timer = (Timer)e.getSource();
timer.stop();
}
}
};
Timer timer = new Timer(20,a);
timer.start();
}
以及触发移动的按钮
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
setLayout(null);
jLabel1.setSize(jLabel1.getPreferredSize());
//add(jLabel1);
//Horizontal movement
int b = 5;
while(b!=0){
mover(jLabel1,false,false);
b--;
}
//Vertical movement
b = 2;
while(b!=0){
mover(jLabel1,false,true);
b--;
}
}
【问题讨论】:
-
您只需从第一个计时器停止的地方开始第二个计时器。
-
是的,一旦您到达您的对象的首选位置,只需停止第一个计时器并启动另一个计时器。
标签: java swing animation timer