paint(Graphics g) sie nie wyrabia

0

Dopiero zaczynam i czuje że czegoś mi brakuje, więc zacznę od wklejenia problemu:

	public void paint(Graphics g) {
// xy to zmienna globalna na bazie której definiuje wymiary paneli przy zmianie rozmiarów okna
		if (xy!=WymiarKratki()){
			xy=WymiarKratki();   // tu wyliczam optymalny rozmiar 
			WymiaryPaneli();      // tu następuje zmiana preferowanych wymiarów paneli ( 4 * JPanel )
                                                    //	panel.setPreferredSize(new Dimension(xPola*xy, yCyfr*xy)
		}
		super.paint(g);
	}

problem polega na tym że gdy rozciągam okno, procedura paint() czasem się wyrabia, a czasem nie i wyświetla mi panele ze starymi wymiarami lub minimalnymi.
Jak zmusić program żeby nadążał aktualizować wymiary.
Może jest jakiś Event w którym mógł bym dokonać zmiany wymiarów zanim ruszy paint()?
Dziękuje z góry za rady.

1

W metodzie paint (jeśli nie rysujesz na obiekcie JFrame, to użyj metody paintComponent) nie wykonuj żadnych obliczeń.

Podepnij do okna ComponentListenera, obliczenia wykonuj w jego metodzie componentResized.

1

A z tego co ja widzę, to problemem jest to, że manipulujesz elementami graficznymi (dzićmi) w trakcie odmalowywania.
To powoduje, że kontekst w którym rysujesz jest nieaktualny i masz różne artefakty.
Pierwsze rozwiązanie to jak wyżej, wykonać te obliczenia przy zmianie rozmiaru.
Drugie lepsze to poczytać jak używa się layoutów i być może napisać swój własny (nie wiem czego dokładnie używasz, ale z tego co mi wiadomo to większość framework'ów UI dla Java używa layoutów).
Jeśli dobrze wygooglałem to: http://www.tutorialspoint.com/awt/awt_layouts.htm

0

Dokładnie o to chodziło :D
Nie dotarłem jeszcze do ComponentListener . W oknie był panel a na nim jeszcze 3 inne. Pierwszy pięknie się rozciągał, ale trzy pozostałe miały zmieniać wymiary skokowo i to w pewnych granicach. Dziękuje ślicznie za pomoc :)

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