2009-08-18 10 views
7

Po pierwsze, aby opisać problem: Podczas zmiany układu ze względu na zmianę szerokości lub wysokości, Java ScrollPaneLayout żąda preferowanej wielkości swoich dzieci PRZED ustawieniem granic tej rzutni. W przypadku wywoływania funkcji Text-Components funkcja getPreferredSpan może zmieniać układ, ponieważ funkcja getPreferredSpan wywołuje wewnętrznie metodę setSize. Efekt jest taki, że żaden widok (rozszerzenie javax.swing.text.View) nie może na pewno pobrać rzeczywistego rozmiaru tego rodzica Komponent w tej sytuacji. Wartość getVisibleRect nie powiedzie się w tym położeniu, ponieważ granice obszaru wyświetlania nie zostały jeszcze ustawione. Sprawdzanie poprawności komponentu tekstowego, aby zablokować proces tworzenia układu, nie jest opcją, ponieważ w tym scenariuszu jest już obezwładnione.Jak uzyskać poprawny widoczny rect podczas validateTree?

Pytanie brzmi: czy istnieje możliwość sprawdzenia, czy granice JComponent są aktualne?

+0

nie. idea ....: P – Epaga

+0

Niestety, nie mam pojęcia. dodano tag "swing" ... – MartinStettner

+0

To pytanie jest bardzo mylące. czy to dla nas wyczyścisz? – marionmaiden

Odpowiedz

1

Może możesz podklasować ScrollPanel i ustawić niestandardową właściwość, taką jak "com.mycompany.BoundsSet", na wartość false, gdy zostanie ona unieważniona, i ustawić ją na true, gdy ustawione są ograniczenia. Następnie widok może sprawdzić tę właściwość, a jeśli jest ona fałszywa, ponownie potwierdź ScrollPanel i zwróć ostatni preferowany rozmiar. Miejmy nadzieję, że ScrollPane będzie kontynuował i ustawi granice, wtedy zdarzenie revalidate zejdzie do potoku, a flaga zostanie wyczyszczona, co pozwoli ci zaufać funkcji getBounds(). Czy coś takiego.

0

Nie można po prostu użyć metody Component#isValid. Jeśli metoda zwróci wartość true, oznacza to, że komponent jest poprawnie zwymiarowany i umieszczony w jego kontenerze nadrzędnym, a wszystkie jego elementy podrzędne są również poprawne.

Powiązane problemy