JAVA - repaint (chyba) problem

0

Witam,

mam kod:

 
public static void main(String[] args) 
	{
			
		Arena pole=new Arena();
		Waz waz=new Waz(pole);
		
		JFrame ramka=new JFrame();
			ramka.setSize(800,500);
			ramka.setTitle("tu bedzie tytol");
			ramka.setLayout(null);
			ramka.setLocationRelativeTo(null);
			ramka.setVisible(true);
			ramka.add(pole);
			
	    
		pole.requestFocusInWindow();
		pole.addKeyListener(waz);
		pole.getGraphics().fillRect(100, 100, 50, 59);

		
	}


Problem mam z linia:

 
pole.getGraphics().fillRect(100, 100, 50, 59);

(klasa Arena to tylko przeładowany JPanel -wiec go nie umieszczam)
Otóż podczas odpalania programiku widzę że ten kwadrat pojawia sie na 0,1 sekundy,
ale potem panel jest pusty. Z tego powodu przypuszczam że to JVM czeka sobie i robi
repainta dopiero po narysowaniu kwadratu.Zaznaczam to tylko przypuszczenia.

Czy mógłby je ktoś potwierdzić bądź rozwiać? i napisać co zrobić żeby kwadrat się jednak pojawił ? :)

0

Rysuj w metodzie public void paintComponent(Graphics g) klasy Arena, a nie w metodzie main().

0

Chce uniknąć powiększenia tej metody do jakichś kolosalnych rozmiarów i nieczytelnych rozmiarów - czy nie ma szans by rysować poza nią?

0

Praktycznie nie, ta metoda jest wywoływana automatycznie. Jeśli narysujesz coś wcześniej (np. w main(), to ta metoda i tak to zasłoni). Jeśli nie chcesz by stała się ogromna, to wywołuj z niej metody odpowiedzialne za narysowanie fragmentów rysunku.

0

@ognistysztorm ale czemu ma być ogromna? Gdybyś podzielił program na poziomy abstrakcji to w paint() miałbyś np.

rysujMape();
rysujSłonia();
rysujKonia();

A gdyby zwierzątek było za dużo to zrobiłbyś metodę rysujZwiarzatka()
Chodzi o to żeby osoba czytająca ten kod od razu wiedziała co się w tym kodzie dzieje. Jak będziesz tam miał 1000 linii rysowania kresek, kropek i jpgów to nikt się w tym nie połapie...

0

Raczej:

  rysujMape(g);
  rysujSłonia(g);
  rysujKonia(g);

gdzie g jest argumentem metody paint (paintComponent).

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