2015-07-19 4 views
-2

Я немного новый в Java, и я не знаю, как я могу вычитать значение каждую секунду в классе, в данном случае NivelCronometrado, я попытался использовать таймер качания и 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(); 
} 

Edit: Вот код одного из моих аттебсов

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

* «Я попытался использовать таймер качания и java.util, и я потерпел неудачу». * Где ваша попытка (1) реализовать его и как именно вы потерпели неудачу? 1) И под «попыткой» я подразумеваю [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверенный пример) или [SSCCE] (http://www.sscce.org/) (Short , 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

Ответ не на то, чтобы объявить о возможном дублировании. Новые пользователи не могут оставлять комментарии по этой причине. Подождите, пока вы еще не представите. поэтому вы можете * комментировать. –