我正在做一个猜谜游戏但是 我在Swing计时器中遇到问题,因为当我推出IF语句时我无法阻止它。 这是我遇到问题的代码的一部分。
continueButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
f.add(firstPicblur);
f.invalidate();
f.remove(loadingEffectBtn);
f.setVisible(true);
f.repaint();
Timer tt = new Timer(100, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
f.add(firstPiclabelA,BorderLayout.NORTH);
f.invalidate();
f.remove(loadingEffect);
f.setVisible(true);
f.repaint();
score01.setText("Score: " + gScore);
gScore--;
}
});
tt.start();
tt.setRepeats(true);
if(gScore == 980){
tt.stop();
P.S这是我在猜测游戏中解决的最后一个问题,在此之后一切都会好的。
答案 0 :(得分:2)
我在评论中误导了你。而不是使tt
成为最终,使其成为封闭类的成员。这是一个例子:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
public class TimerTest extends JFrame {
private JLabel label = new JLabel("default");
private Timer timer;
private int gScore = 985;
public TimerTest() {
add(label);
pack();
timer = new Timer(100, new ActionListener() {
public void actionPerformed(ActionEvent e) {
gScore--;
if (gScore == 980) {
timer.stop();
}
label.setText(String.valueOf(gScore));
}
});
timer.setRepeats(true);
timer.start();
setLocationRelativeTo(null);
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
TimerTest test = new TimerTest();
test.setVisible(true);
}
});
}
}
你只需要调用它的构造函数一次,然后依赖它的start()
和stop()
方法,所以你的代码看起来应该类似于:
continueButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
f.add(firstPicblur);
f.invalidate();
f.remove(loadingEffectBtn);
f.setVisible(true);
f.repaint();
tt.start();
}
答案 1 :(得分:2)
Timer
是动作事件的来源,因此您可以使用它,如果您不想将其作为该类的字段:
@Override
public void actionPerformed(ActionEvent e) {
...
gscore--;
if (gScore == 980) {
((Timer) e.getSource()).stop();
}
}