paint(Graphics g) sie nie wyrabia

Odpowiedz Nowy wątek
2015-01-26 00:43
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.

edytowany 2x, ostatnio: bogdans, 2015-01-26 09:53
!Wstawiaj kod w znaczniki <code=java></code> - bogdans 2015-01-26 09:53

Pozostało 580 znaków

2015-01-26 09:15
bogdans_nz

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.

Pozostało 580 znaków

2015-01-26 09:42
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


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22, 2015-01-26 09:43

Pozostało 580 znaków

2015-01-26 17:56
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 :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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