Nie mogę wymusić układ w Swing. Mam JComponent
dodany do JLayeredPane
i ustawiam granicę na JComponent
. Następnie chcę natychmiast ponownie rysować wszystko - nie w sensie "proszę to tak szybko" jak invalidate()
, ale synchronicznie i natychmiastowo. Jakaś pomoc? Nie mogę znaleźć odpowiedniej metody, aby to zrobić, a całe moje czytanie o invalidate(), validate(), repaint(), doLayout(), etc
po prostu wprowadza mnie w błąd!Wymuś natychmiastowy układ i pomaluj w Swing
Odpowiedz
Najbardziej niezawodnym sposobem, aby Swing zaktualizował wyświetlacz, jest użycie SwingUtilities.invokeLater
. W twoim przypadku, to będzie wyglądać mniej więcej tak
SwingUtilities.invokeLater(new Runnable {
public void run() {
somecomponent.repaint();
}
});
ja sobie sprawy „invokelater” nie dokładnie brzmi jak robi coś natychmiastowe, ale w praktyce, imprezy pisał w ten sposób tendencję wykonać dość szybko w porównaniu do zaledwie nazywając np somecomponent.repaint()
bezpośrednio. Jeśli bezwzględnie musisz sprawić, by kod sterujący czekał na aktualizację GUI, to jest też invokeAndWait
, ale moje doświadczenie jest takie, że rzadko jest to konieczne.
Zobacz także: document on event dispatch w Swing.
Zgodnie z this (patrz rozdział "Malowanie synchroniczne") powinna działać metoda paintImmediately().
Próbowałem tego - myComponent.paintImmediately (myComponent.getBounds). Bez powodzenia :(Myślę, że może tak być dlatego, że zmiana granicy wymaga nowego przejścia układu z powodu granicy z użyciem dodatkowych pikseli po każdej stronie obiektu. – Hamy
paint Natychmiast może to być droga, ale nadal musisz opublikować ją jako zdarzenie using invokeLater lub invokeAndWait, myślę. – phooji
@Hamy Czy próbowałeś wywoływanie go na składnik nadrzędny, który może pozwolić na zmianę układu – Jonathan
- 1. Układ Java swing
- 2. HOWTO: Pomaluj linię przerywaną w .NET (WinForms)
- 3. Natychmiastowy PagerAdapter Android
- 4. Załadunek zespołu PowerPC Natychmiastowy
- 5. AutoHotKey: Natychmiastowy tekst zastępuje
- 6. Uzyskaj natychmiastowy pierwszy element podrzędny
- 7. Android - układ koordynatora, układ szuflady i fragmenty
- 8. Jak utworzyć układ Tiling/układ przepływu w TkInter?
- 9. jak uzyskać natychmiastowy wpis w Androidzie?
- 10. Jak podnieść natychmiastowy sigalarm w c
- 11. Wymuś zdarzenie w jQuery
- 12. Różnica między validate(), wznawiają ważność() i unieważnia() w Swing GUI
- 13. IdeaVim i układ rosyjski
- 14. Jak połączyć Swing i SpringFramework?
- 15. Aplikacje Scala i Swing GUI
- 16. Sterowanie zakotwiczeniem i dokowaniem w java Swing
- 17. MVC i Swing w aplikacji desktopowej
- 18. auto_ptr, natychmiastowy get() i release() - czy jest przydatny?
- 19. FlowLayout in Swing
- 20. Odśwież lub wymuś przerysowanie fragmentu.
- 21. Wymuś wyrównanie treści w centrum
- 22. Wymuś IE9 w tryb dziwactwa?
- 23. Swing JTextPane w javafx
- 24. Przeciek pamięci w Swing
- 25. Eclipse IDE - układ graficzny Android i układ strony obok siebie
- 26. Jak ustawić rozmiar i układ w onSizeChanged?
- 27. Mapy Google i układ koordynatora
- 28. Natychmiastowy alert logowania z ramą Twittera w iOS5?
- 29. Wymuś usunięcie pamięci podręcznej
- 30. wsparcia ekran wiele urządzeń wykorzystujące układ duży, układ normalny i układ-XLarge foldery
Niestety, żadna z nich nie zadziała na moją impl:/Potrzebuję aktualizacji GUI natychmiast, a nie po przetworzeniu oczekujących zdarzeń. To ze względu na wadę w moim projekcie, że potrzebuję tego w ten sposób, ale niestety zmiana spowodowałaby mnie z powrotem prawie dwa tygodnie i mam jutro dostawa:/ – Hamy
OK spróbuj tego: użyj invokeAndWait, następnie wewnątrz wywoływanego wywołania paintImmediately na zewnętrzny pojemnik. Myślę, że jest to tak blisko, jak można uzyskać za pomocą Swing - będzie to nadpisać poprzednie połączenia do "odświeżenia", jeśli się nie mylę. – phooji
Niestety to też nie działa. Aby wywołać invokeAndWait, musisz odrodzić nowy wątek. Mam * bardzo * powolne zdarzenie zdarzające się zaraz po tym obrazie, i zaczyna się wykonywanie przed uruchomieniem, co skutkuje zamrożeniem interfejsu graficznego bez wykonania tej funkcji malowania. – Hamy