JAVA - repaint (chyba) problem

JAVA - repaint (chyba) problem
OG
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 16
0

Witam,

mam kod:

Kopiuj
 
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:

Kopiuj
 
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ł ? :)

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

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

OG
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 16
0

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

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
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.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

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

Kopiuj
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...

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

Raczej:

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

gdzie g jest argumentem metody paint (paintComponent).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.