Odświeżanie obrazu po upłynięciu czasu - pętla

0

Mam problem - to, co powinno rysować się kilka razy rysuje się tylko raz po ukończeniu się pętli.

for (int i=godzinaOd; i<=godzinaDo; i++){
				
				obrazPanel.godzina = i;  // w zależności od wartości godzina jest rysowane inaczej
				obrazPanel.repaint();
				System.out.println("rysuję");
				
				try {
					TimeUnit.MILLISECONDS.sleep(500);
				} catch (InterruptedException e1) {
				// TODO Auto-generated catch block
					e1.printStackTrace();
				  }
}

Oczywiście na konsoli wyświetlany jest tak jak trzeba tekst "rysuję".
Proszę o pomoc.

1

Takie rzeczy robi się inaczej (nie przez usypianie). Stwórz Timer (javax.swing.Timer) , który będzie co pewien czas zmieniał parametry rysunku i wywoływał repaint.

0
int delay = 500; //milliseconds
			  ActionListener taskPerformer = new ActionListener() {
			      public void actionPerformed(ActionEvent evt) {
			    	for (int i=godzinaOd; i<=godzinaDo; i++){		
			    		obrazPanel.godzina = i;
			    		obrazPanel.repaint();
			    		System.out.println("rysuję");
					
			    	}
			      }
			  };
			  
			  Timer timer = new Timer(delay, taskPerformer);
			  timer.start(); 

Nie działa, bo pokazuje tylko 1 obrazek a tekst wypisuje (dodzinaDo-godzinaOd)*nieskończoność razy. A gdy napisałem bez pętli for, tylko tak:

public void actionPerformed(ActionEvent evt) {
			    	{		
			    		obrazPanel.godzina = godzinaOd++;
			    		obrazPanel.repaint();
			    		System.out.println("rysuję");
					
			    	}

to działa (oczywiście w nieskończoność).

1

Kod w actionPerformed musi być bez pętli. Pętlą zajmuje się timer. Jak już Ci się znudzą zmiany obrazka, to zatrzymaj timer (timer.stop()).

0

A jak mogę zobaczyć kod klasy Timer ?

0

Sprawdź czy w katalogu z JDK nie masz pliku src.zip.

1 użytkowników online, w tym zalogowanych: 0, gości: 1