Java 摆动定时器循环
Java Swing Timer Loop
想象一个数字数组。特定数字特定按钮,必须闪烁。我必须通过数组。现在摆动计时器可以让一个按钮闪烁,但是如果我尝试让 for(int I=0;i<array.length;i++)
循环转到下一个按钮 - 计时器不会这样做。任何帮助,将不胜感激。谢谢你。这是我现在的代码:
Timer startGame = new Timer(1000, new ActionListener() {
int colorPlay = 1;//which sqaure to blink
int blinkingState = 0;
@Override
public void actionPerformed(ActionEvent e) {
if (blinkingState < 2) {
int i = blinkingState % 2;
switch (i) {
case 0:
if (colorPlay == 1) {
greenButton.setBackground(Color.green);
} else if (colorPlay == 2) {
redButton.setBackground(Color.red);
} else if (colorPlay == 3) {
blueButton.setBackground(Color.blue);
} else if (colorPlay == 4) {
yellowButton.setBackground(Color.yellow);
}
break;
case 1:
if (colorPlay == 1) {
greenButton.setBackground(lightGreen);
} else if (colorPlay == 2) {
redButton.setBackground(lightRed);
} else if (colorPlay == 3) {
blueButton.setBackground(lightBlue);
} else if (colorPlay == 4) {
yellowButton.setBackground(lightYellow);
}
break;
}//switch ends
blinkingState++;
}//if blinking<2 ends
}//actionPerformed ends
});//timer ends
你的逻辑似乎有问题。你要的是:
- 闪烁绿灯
- 等等
- 红灯闪烁
- 等等
- 闪烁黄灯
眨眼的地方
- 设置常规背景颜色
- 等等
- 设置浅色背景颜色
这意味着您最好使用两个 Timer
实例。
Timer lightTimer = new Timer( 2000, new ActionListener(){
private int lightCounter = 0;
@Override
public void actionPerformed(ActionEvent e){
switch( lightCounter ){
case ...:
final JButton lightButton = ...;
lightButton.setBackground( regularColour );
Timer blinkingTimer = new Timer( 1000, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
lightButton.setColor( lightColour );
}
}
blinkingTimer.setRepeats( false );
blinkingTimer.start();
}
lightCounter++;
if ( lightCounter == numberOfLights ){
((Timer)e.getSource()).stop();
}
}
} );
lightTimer.setRepeats( true );
lightTimer.start();
按照上面的代码应该可以做到。注意如何:
- 我使用第二个定时器将闪烁灯切换回之前的状态(
BlinkingTimer
变量)
BlinkingTimer
使用setRepeats( false )
只需要触发一次
LightTimer
使用setRepeats( true )
因为它需要执行多次,一旦让所有灯闪烁就自动关闭
想象一个数字数组。特定数字特定按钮,必须闪烁。我必须通过数组。现在摆动计时器可以让一个按钮闪烁,但是如果我尝试让 for(int I=0;i<array.length;i++)
循环转到下一个按钮 - 计时器不会这样做。任何帮助,将不胜感激。谢谢你。这是我现在的代码:
Timer startGame = new Timer(1000, new ActionListener() {
int colorPlay = 1;//which sqaure to blink
int blinkingState = 0;
@Override
public void actionPerformed(ActionEvent e) {
if (blinkingState < 2) {
int i = blinkingState % 2;
switch (i) {
case 0:
if (colorPlay == 1) {
greenButton.setBackground(Color.green);
} else if (colorPlay == 2) {
redButton.setBackground(Color.red);
} else if (colorPlay == 3) {
blueButton.setBackground(Color.blue);
} else if (colorPlay == 4) {
yellowButton.setBackground(Color.yellow);
}
break;
case 1:
if (colorPlay == 1) {
greenButton.setBackground(lightGreen);
} else if (colorPlay == 2) {
redButton.setBackground(lightRed);
} else if (colorPlay == 3) {
blueButton.setBackground(lightBlue);
} else if (colorPlay == 4) {
yellowButton.setBackground(lightYellow);
}
break;
}//switch ends
blinkingState++;
}//if blinking<2 ends
}//actionPerformed ends
});//timer ends
你的逻辑似乎有问题。你要的是:
- 闪烁绿灯
- 等等
- 红灯闪烁
- 等等
- 闪烁黄灯
眨眼的地方
- 设置常规背景颜色
- 等等
- 设置浅色背景颜色
这意味着您最好使用两个 Timer
实例。
Timer lightTimer = new Timer( 2000, new ActionListener(){
private int lightCounter = 0;
@Override
public void actionPerformed(ActionEvent e){
switch( lightCounter ){
case ...:
final JButton lightButton = ...;
lightButton.setBackground( regularColour );
Timer blinkingTimer = new Timer( 1000, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
lightButton.setColor( lightColour );
}
}
blinkingTimer.setRepeats( false );
blinkingTimer.start();
}
lightCounter++;
if ( lightCounter == numberOfLights ){
((Timer)e.getSource()).stop();
}
}
} );
lightTimer.setRepeats( true );
lightTimer.start();
按照上面的代码应该可以做到。注意如何:
- 我使用第二个定时器将闪烁灯切换回之前的状态(
BlinkingTimer
变量) BlinkingTimer
使用setRepeats( false )
只需要触发一次LightTimer
使用setRepeats( true )
因为它需要执行多次,一旦让所有灯闪烁就自动关闭