我最近制作了一个小型益智游戏,涉及点击某些区域。我还制作了一个解算器,可以激活获胜所需的区域。我面临的问题是,我想在每次激活一个区域时暂停以创建一种“解决动画”。我的问题在这里表示
package experiment;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ExperimentHere extends JFrame implements ActionListener
{
private static final long serialVersionUID = 1L;
private JButton changeLabelButton;
private JPanel mainPanel;
private JLabel labelToChange;
public ExperimentHere() {
changeLabelButton = new JButton("Set the label");
changeLabelButton.addActionListener(this);
mainPanel = new JPanel();
labelToChange = new JLabel();
labelToChange.setText("This needs to be changed");
mainPanel.add(labelToChange);
mainPanel.add(changeLabelButton);
this.add(mainPanel);
setTitle("Timer Program");
setContentPane(mainPanel);
setPreferredSize(new Dimension(1000, 1000));
pack();
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(changeLabelButton)){
changeLabel();
}
}
public void changeLabel(){
for (int i = 0; i<5; i++){
labelToChange.setText(""+i);
// Pause for 200ms here
}
}
public static void main(String[] args){
ExperimentHere test = new ExperimentHere();
test.setVisible(true);
}
}
我尝试过使用计时器,但我不确定如何正确格式化它,以便它只在每次changeLabel()内部循环递增时暂停,因为Timer()中的第二个参数要求一个ActionListener。 我也尝试过使用 Thread.sleep() 但它只是卡住了我的程序,然后立即解决它。
理想情况下,changeLabel 方法会递增 1,将标签设置为新字符串,等待 200 毫秒,然后再次递增。
最佳答案
I have tried using Timers, but I'm not sure how to format it properly so that it only pauses each time the loop inside of changeLabel() is incremented
当您使用计时器
时,您不会使用循环。 Timer
的要点是,您启动 Timer,它会一直执行,直到您停止 Timer
。
您也不创建方法,而是创建一个 Action
以便在 Timer
触发时调用。
因此,您的类中需要一个实例变量来跟踪 Timer 触发的次数(我们称之为“timerCounter”)。然后,您需要创建一个 Action
以便在每次触发 Timer
时调用。
因此,您创建了几个实例变量:
int timerCounter = 0;
Action action;
然后在类的构造函数中创建一个类似于以下内容的操作:
action = new AbstractAction()
{
@Override
public void actionPerformed(ActionEvent e)
{
labelToChange.setText("" + timerCounter);
timerCounter++;
if (timerCounter > 5)
{
Timer timer = (Timer)e.getSource();
timer.stop();
}
}
}
现在,在按钮的 ActionListener
中,您可以执行以下操作:
timerCounter = 0;
Timer timer = new Timer(200, action);
timer.start();
关于java - 如何使用 Swing 创建方法,使用计时器 sleep ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40733925/