Diskuze: Timer v pozadí

Java Java Timer v pozadí

Avatar
BLADE
Člen
Avatar
BLADE:

Zdravím ,
potreboval by som pomoc s Timerom. Je to vlastne asi dosť jednoduché no neviem si s tým rady. Chcel by som aby mi v aplikácií išiel nejaký timer. To by nebol problém, lenže ja by som chcel aby ten timer spravil niečo po skončení no zároveň to nechcem mať ako veľký cyklus. Tak aby ste ma pochopili napríklad by som chcel spraviť jednoduchú aplikáciu ktorá bude mať jeden Label a jedno tlačítko a keď po spustení stlačím tlačítko odštartuje sa čas a užívatel bude mať 10 sekúnd na to aby čo najviac krát klikol na tlačítko. Label bude číslo koľko krát kolikol. Po uplinutí času by už nemohol kliknúť na tlačítko. No ale ako to spraviť teda aby som mohol medzi tým časom niečo robiť
Keď to aj spravím tak jedine tak že v Listenery pri kliknutí prvý krát zapnem ten timer a tam mám metódu ktorá testuje či neuplinul čas. Ak nie tak pripočíta +1 k labelu. No a to je ten problém ja chcem aby mi kontrolovalo ten čas v pozadí a nie iba keď zavolám Listener teda po kliknutí. Pretože takto mi napr ide ten čas aj nekonečne dlho až pokiaľ nekliknem. Ja by som chcel aby v momente ako ten timer dosiahne desiatu sekundu niečo urobil.
Snáď ste ma pochopili , bol by som vám veľmi vďačný za radu.

Editováno 9.1.2015 17:58
 
Odpovědět 9.1.2015 17:58
Avatar
Contrix
Redaktor
Avatar
Contrix:

No, šlo by to udělat i takto:

int a = 0;
Timeline timer = new Timeline(new KeyFrame(Duration.seconds(1), new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {
        a++;
        zkontroluj(a);
    }
}));
timer.setCycleCount(Timeline.INDEFINITE);
timer.play();

a pak metoda, která bude vyhodnocovat čas

private void zkontroluj (int cas)
{
    if(a<=10)
        //vypíšeš třeba počet zbývajících sekund
    else
        //deaktivuješ tlačítko
}
Editováno 9.1.2015 19:06
Nahoru Odpovědět 9.1.2015 19:05
Jsou zloději, které zákon netrestá, třebaže kradou člověku to nejcennější čas.
Avatar
Silvinios
Redaktor
Avatar
Odpovídá na BLADE
Silvinios:

Lze použít třídu javax.swing.Timer.
Při prvním kliknutí se spustí Timer. Po uplynutí požadované doby se zavolá listener, v kterém se zakáže tlačítko.

Příklad:

final JButton tlacitko = new JButton();
tlacitko.addActionListener(new ActionListener() {
  @Override
  public void actionPerformed(ActionEvent e) {
    if (pocet == 0) {
      Timer timer = new Timer(10000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
          tlacitko.setEnabled(false);
        }
      });
      timer.start();
    }
   }
});
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 9.1.2015 19:47
Avatar
BLADE
Člen
Avatar
BLADE:

Ďakujem vám za odpovede, pomohli. Potom som mal ďalší problém že koho označiť že pomohol :D. Použil som ten listener ,no teraz sa zle cítim že som mal dať radšej contrixovi keďže napísal tiež správne riešienie, skôr a má menej zkušeností.

 
Nahoru Odpovědět 9.1.2015 23:55
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.