Mateusz Mazurek – programista z pasją

Blog o Pythonie i kilku innych technologiach. Od developera dla wszystkich.

Programowanie

Prosty Timer w Javie

Cześć, dziś pokażę jak korzystając z wątków, możemy zbudować prosty timer, który, nie dość że będzie odliczał na naszych oczach sekundy, to, co każde kolejne 10s pokaże komunikat.

Jest to mimo wszystko dość proste. Zacznijmy od klasy, która będzie rozszerzała JFrame ;)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
publicclass Main extendsJFrame{

publicstaticvoid main(String[] args){

   Main m =new Main();
   m.setDefaultCloseOperation(EXIT_ON_CLOSE);
   m.setSize(newDimension(50,100));
   JLabel time =newJLabel("0");
   JPanel main =newJPanel();
   main.add(time);
   m.add(main);
   m.setVisible(true);

}

}

Taki kod wyświetli małe okienko z napisem 0 ;)

Teraz zajmijmy się klasą, która będzie zmieniać co sekundę napis na kolejną, większą o 1 liczbę.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
publicclassTimerimplementsRunnable{

   JLabel t;

   publicTimer(JLabel time){
      this.t=time;
   }

   @Override
   publicvoid run(){

   }

}

}

Stworzyliśmy konstruktor z jednym parametrem – obiektem JLabela, który będziemy zmieniać. Musimy również przedefiniować metodę run().
A więc do dzieła ;)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
publicclassTimerimplementsRunnable{

   JLabel t;

   publicTimer(JLabel time){
      this.t=time;
   }

   @Override
   publicvoid run(){
   while(true){

      try{
         Thread.sleep(1000);
      }catch(InterruptedException e){}
      int current =Integer.parseInt(t.getText());
      t.setText((current+1)+"");
      if(current%10==0&& current!=0)
           JOptionPane.showMessageDialog(null, "Minelo kolejne 10 sekund", "Message", JOptionPane.INFORMATION_MESSAGE);
   }

}

}

Co myśmu tu zrobili? W pętli nieskończonej zatrzymuje na sekundę wątek (1000ms), pobieramy z JLabela wartosć, zwiększamy ją o 1 i następnie zmieniamy wartość w tym JLabelu. Jeśli wartość przed zmianą modulo 10 jest zerem to znaczy że jest ona 10 lub wielokrotnością 10tki.

I teraz uruchomimy wątek. Wracamy do naszej klasy dziedziczącej po JFrame i dodajemy do niej 3 linijki:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
publicclass Main extendsJFrame{

    publicstaticvoid main(String[] args){
       
        Main m =new Main();
        m.setDefaultCloseOperation(EXIT_ON_CLOSE);
        m.setSize(newDimension(50,100));
        JLabel time =newJLabel("0");
        JPanel main =newJPanel();
        main.add(time);
        m.add(main);
        Timer t =newTimer(time);
        Thread timer =newThread(t);
        timer.start();
        m.setVisible(true);

    }

}

No i to w sumie tyle :)

Pozdrawiam!

Dzięki za wizytę,
Mateusz Mazurek

A może wolisz nowości na mail?

Subskrybuj
Powiadom o
guest

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

0 komentarzy
Inline Feedbacks
View all comments