如何每秒更改一个类的值?

时间:2015-07-19 16:35:12

标签: java swing timer countdown countdowntimer

我是Java的新手,我不知道如何在类中每秒减去一个值,在这种情况下 NivelCronometrado ,我试图使用swing的swing和java .util和我失败了。

我需要的是在JPanel节目中倒计时器, NivelCronometrado 有时间开始,JPanel包含这个类。

我在JPanel中创建一个JLabel来显示这个时间。

以下是 NivelCronometrado

的代码
import clases.logicas.elementos.Puntaje;
import java.util.ArrayList;

public class NivelCronometrado extends Nivel
{
    private int tiempo;

    public NivelCronometrado(int argTiempo, int argId, int[][] argObstaculos,
                         int[] argPuntosEstrella, Long argRandomSeed, ArrayList<Puntaje> argPuntajes)
    {
        super(argId, argObstaculos, argPuntosEstrella, argRandomSeed, argPuntajes);
        this.tiempo = argTiempo;
    }

    public void disminuirTiempo()
    {
        this.tiempo--;
    }

    public int getTiempo()
    {
    return this.tiempo;
    }

}

这里是JPanel代码的摘录,我尝试修改JLabel以显示时间:

public void establecerNivel()
{
    this.setTextTitulo("Nivel " + this.nivel.getId());

    this.setTextPuntosValor("0");

    if (this.nivel instanceof NivelRestringido) {
        this.setTextEspecialTexto("Movimientos:");
        NivelRestringido nivelRestringido = (NivelRestringido)this.nivel;
        this.setTextEspecialValor(Integer.toString(nivelRestringido.getIntentos()));
    }
    else if (this.nivel instanceof NivelCronometrado) {
        this.setTextEspecialTexto("Tiempo:");
        NivelCronometrado nivelCronometrado = (NivelCronometrado)this.nivel;

        /*Here subtract time to nivelCronometrado every second*/

        this.setTextEspecialValor(Integer.toString(nivelCronometrado.getTiempo()));     
    }

    this.setTextEstrellaValor1(Integer.toString(this.nivel.getPuntosEstrella()[0]));
    this.setTextEstrellaValor2(Integer.toString(this.nivel.getPuntosEstrella()[1]));
    this.setTextEstrellaValor3(Integer.toString(this.nivel.getPuntosEstrella()[2]));

    this.repaint();
}

编辑:这是我的一个尝试的代码

else if (this.nivel instanceof NivelCronometrado) {
        this.setTextEspecialTexto("Tiempo:");
        NivelCronometrado nivelCronometrado = (NivelCronometrado)this.nivel;

        ActionListener taskPerformer = new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                nivelCronometrado.disminuirTiempo();
            }
        };

        new Timer(1000, taskPerformer).start();

        this.setTextEspecialValor(Integer.toString(nivelCronometrado.getTiempo()));     
    }

1 个答案:

答案 0 :(得分:-1)

可能重复

Use javax.swing.Timer to make countdown timer in Java

以下是您可以在JPanel中调用的代码段。

public void updateDisplay(String data) {
    newdata = data;
    randomData.setText(newdata);
}