2015-07-19 46 views
-2

我是Java中的一些新手,我不知道如何在類中每秒減去一個值,在這種情況下,我試圖使用Timer和java.util的Timer,但是我失敗了。如何每秒更改一次課程的價值?

我需要的是一個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; 
    } 

} 

在這裏,我嘗試修改一個JLabel來顯示時間的JPanel的代碼的摘錄:

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()));  
    } 
+0

*「我嘗試使用swing和java.util的定時器,但是失敗了。」*您的嘗試(1)在哪裏實現它,以及您究竟是如何失敗的? 1)通過「嘗試」,我的意思是[MCVE](http://stackoverflow.com/help/mcve)(最小完整可驗證示例)或[SSCCE](http://www.sscce.org/)(短,Self Contained,Correct Example),而不是不可編譯的,出於上下文代碼片段。 –

+0

我做了一個編輯,現在它被添加到帖子中。 – Kazu

+0

你顯然要麼沒有閱讀,要麼不明白,什麼是MCVE。 –

回答

-1

Possibl Ë重複

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

下面的代碼片段,您可以在您的JPanel調用。

Timer timer = new Timer(1000, new TimerListener()); 

class TimerListener implements ActionListener { 
    int elapsedSeconds = 30; 

    public void actionPerformed(ActionEvent evt){ 
     elapsedSeconds--; 
     timerLabel.setText(elapsedSeconds) 
     if(elapsedSeconds <= 0){ 
      timer.stop(); 
      wrong() 
      // fill'er up here... 
     } 
    } 
} 
+2

答案不是公佈可能的重複的地方。新用戶無法發佈評論的原因。等到你有更多的代表。所以你*可以*發表評論。 –