bogdans napisał(a)
Na oko są dwa obiekty klasy ObrazWyspy - w jednym działa timer, a drugi zajmuje się wyświetlaniem (dlatego na konsoli widać działanie timera a na panelu nie).
Zrób tak jak Ci radziłem.Zrezygnuj z ObrazWyspy sluchacz=new OrazWyspy();, zamiast tego wpisz
Timer t = new Timer(1000, this);
Dzieki wielkie za kazda kolejna odpowiedz :) Jestem poczatkujacym programista Javy dlatego ciezko to idzie.
ActionListener sluchacz = new ObrazWyspy();
Timer t = new Timer(1000, sluchacz);
t.start();
Jest w klasie głównej i jest wykonywane tylko raz. Później już sie cały czas wykonuje kod który jest w metodzie actionPerformed. To co sugerujesz nie działa. chodzi Ci o to aby te początkowe wywołanie wyglądało tak?
Timer t = new Timer(1000, this);
t.start();
Tak sie nie da, to powoduje blad. Do Timera musi byc przekazany obiekt typu ActionListener. Wiem gdzie jest blad tylko nie wiem dlaczego. Odnosnie klasy Panel. Jak wstawie linie:
System.out.println(text);
Do setText(String t) to wyswietla sie w konsoli ta wyspa cyklicznie. Natomiast to samo wywołanie:
System.out.println(text);
W metodzie rysujacej
paintComponent(Graphics g)
Nie wyswietla nic, oprocz tesktu tego poczatkowego. Dlatego:
public void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println(text);
if(text !=null){
g.drawString(text, WIADOMOSC_X, WIADOMOSC_Y);
}
}
public void setText(String t) {
text = t;
}
Jest na pewno wykonywane tylko raz i metoda panel.repaint(); po prostu nie działa. Tylko dlaczego?