动作之间的swing Java定时器延迟
我有一个(可能是愚蠢的)问题。。。 我花了好几个小时编写了一个计时器,在命令之间暂停,但我无法让它工作。它应该看起来像一种“老虎机”效应。我已经尝试了一些事情,我已经绝望了。谁能帮我一下,或者至少给我一个提示,我做错了什么
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Window implements ActionListener
{
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
JFrame MAIN = new JFrame("Test");
Integer[] ZufallsNUMBERen = { 1, 2, 3, 4 };
String[] Names = { "Name1", "Name2", "Name3", "Name4" };
JButton B_Start = new JButton();
Integer NUMBER = 0;
Timer timer;
JLabel Name1 = new JLabel(Names[0]);
JLabel Name2 = new JLabel(Names[1]);
JLabel Name3 = new JLabel(Names[2]);
JLabel Name4 = new JLabel(Names[3]);
public static void main(String[] args)
{
new Window().window();
}
public void window()
{
MAIN.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
MAIN.setLayout(null);
MAIN.setResizable(false);
MAIN.setSize( 665, 519);
MAIN.setForeground(Color.BLACK);
MAIN.getContentPane().setBackground(Color.decode("#008080"));
MAIN.setVisible(true);
int x = (int) ((dimension.getWidth() - MAIN.getWidth()) / 2);
int y = (int) ((dimension.getHeight() - MAIN.getHeight()) / 2 - 100);
MAIN.setLocation(x,y);
B_Start.setBounds(250, 110, 300, 300);
Name1.setBounds(100,125,200,40);
Name2.setBounds(100,200,200,40);
Name3.setBounds(100,275,200,40);
Name4.setBounds(100,350,200,40);
Name1.setFont(new Font("SnowCaps", Font.BOLD, 30));
Name2.setFont(new Font("SnowCaps", Font.BOLD, 30));
Name3.setFont(new Font("SnowCaps", Font.BOLD, 30));
Name4.setFont(new Font("SnowCaps", Font.BOLD, 30));
MAIN.add(B_Start);
MAIN.add(Name1);
MAIN.add(Name2);
MAIN.add(Name3);
MAIN.add(Name4);
B_Start.addActionListener(this);
timer = new Timer(500, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
NUMBER = NUMBER +1;
Slot1();
System.out.println(NUMBER);
Slot2();
System.out.println(NUMBER);
Slot3();
System.out.println(NUMBER);
Slot4();
System.out.println(NUMBER);
}
});
}
public void Slot1(){
Name1.setText(Names[0]);
Name2.setText(Names[1]);
Name3.setText(Names[2]);
Name4.setText(Names[3]);
NUMBER = NUMBER +1;
}
public void Slot2() {
Name1.setText(Names[3]);
Name2.setText(Names[0]);
Name3.setText(Names[1]);
Name4.setText(Names[2]);
NUMBER = NUMBER +1;
}
public void Slot3() {
Name1.setText(Names[2]);
Name2.setText(Names[3]);
Name3.setText(Names[0]);
Name4.setText(Names[1]);
NUMBER = NUMBER +1;
}
public void Slot4() {
Name1.setText(Names[1]);
Name2.setText(Names[2]);
Name3.setText(Names[3]);
Name4.setText(Names[0]);
NUMBER = NUMBER +1;
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == B_Start)
{
if(!timer.isRunning())
timer.start();
else
timer.stop();
}
}
}
谢谢
# 1 楼答案
使用NUMBER(或另一个迭代器变量)中断Slot方法调用的计时