2012-06-01 13 views
5

jestem zabawy z klasy Graphics Java trochę i Zastanawiałem się tylko - gdy jest to konieczne, aby wywołać metodę repaint()? Próbowałem to skomentować i nie wpłynęło to na mój graficzny interfejs użytkownika. Widziałem, jak dużo czytałem w kodzie Java GUI, który czytałem. Czy ktokolwiek zastanawia się, kiedy go użyć i kiedy go nie używać?repaint() Metoda w Javie

Odpowiedz

1

Nigdy nie jest to konieczne w przypadku większości aplikacji typu swing, ponieważ obsługują go automatycznie (w przypadku typowych operacji, takich jak zmiana wartości tekstowych na przyciskach i dodawanie danych do pola listy).

Zwykle tylko wtedy, gdy wprowadzono jakieś zmiany, których obrót nie zostanie automatycznie podniesiony - na przykład nie używasz menedżera układu i ręcznie zmieniasz rozmiar komponentów (ponieważ zwykle menedżer układu odświeża swoje elementy, jeśli to konieczne).

+0

Dziękuję bardzo! –

0

Po uruchomieniu aplikacji, to „malować” swoje GUI.

Trzeba zadzwonić repaint(), gdy chcemy, aby ponownie zwrócić GUI ponieważ zmieniły coś w środku.

Jeśli chcesz usunąć przycisk, musisz go usunąć (lub uczynić niewidoczny), następnie musisz zadzwonić pod numer validate() lub repaint(), aby ponownie obliczyć (ponownie narysować) GUI.

1

repaint() odświeża widok (część), więc kiedy tylko dokonywać żadnych zmian na składniku, trzeba to nazwać. Na przykład, jeśli obrócić element graficzny, trzeba wykonać połączenie do repaint(), aby zobaczyć zmianę w składniku zawierającym

+0

Dziękuję za wyjaśnienie! Tak naprawdę staram się, aby moja grafika była taka, że ​​gdy użytkownik kliknie na osi X (jest to wykres prędkości dźwięku), wykres przybliży tę część wykresu. Trochę utknąłem, jak to zrobić. Czy masz jakies pomysły? –

+0

Oto, co prawdopodobnie zrobiłbym: uzyskaj współrzędne punktu, który kliknąłem, podany przez 'getX()' i 'getY()'. Następnie utwórz grafikę ** g **, która będzie obszarem, który chcę pokazać i 'repain (g)'. –

0

Jedynym rzeczy mogę myśleć:

new Thread() { 
    @Override 
    public void run() { 
    while (ClassName.this.isVisible()) { 
     ClassName.this.updateStatusLabel(); 
     ClassName.this.validate(); 
     ClassName.this.repaint(50L); 
     try { 
     Thread.sleep(1000); 
     } catch (final InterruptedException e) { 
     Log.log(e); 
     } 
    } 
    } 
}.start(); 

Załóżmy masz powyższy kod w konstruktorze JDialog. Co updateStatusLabel nie sprawdza zmienną logiczną, publicznym lub ustawiane za pomocą metody i ustawić ikonę na JLabel w podstawy do takiej wartości logicznej. Jeśli nie sprawdzasz i nie odświeżasz GUI, modyfikacja nie zostanie pokazana, dopóki nie zostanie zgłoszone inne zdarzenie, najprawdopodobniej wywołane przez użytkownika. Jeśli użytkownik czeka, aż etykieta pokaże określoną ikonę z powodu, powiedzmy, wskazania, że ​​urządzenie jest dostępne przez Internet, nigdy nie będzie wchodzić w interakcję (lub przynajmniej opóźnia interakcje tak wiele).