Na forum 4programmers.net korzystamy z plików cookies. Część z nich jest niezbędna do funkcjonowania
naszego forum, natomiast wykorzystanie pozostałych zależy od Twojej dobrowolnej zgody, którą możesz
wyrazić poniżej. Klikając „Zaakceptuj Wszystkie” zgadzasz się na wykorzystywanie przez nas plików cookies
analitycznych oraz reklamowych, jeżeli nie chcesz udzielić nam swojej zgody kliknij „Tylko niezbędne”.
Możesz także wyrazić swoją zgodę odrębnie dla plików cookies analitycznych lub reklamowych. W tym celu
ustaw odpowiednio pola wyboru i kliknij „Zaakceptuj Zaznaczone”. Więcej informacji o technologii cookie
znajduje się w naszej polityce prywatności.
Witajcie,
Mam problem.
Tworzę kontener z czarnym tłem, dodaję do kontenera obraz, następnie dynamicznie tworzę na obrazie labele, które po zaznaczeniu mają tło kontenera czyli czarne, a zależy mi aby labele miały tło obrazu. Jak to zrobić?
Sposób 1 (tradycyjny):
Kontroluj współrzędne labeli, na ich podstawie określ, który kawałek obrazka będzie leżał pod każdym z nich indywidualnie i odrysowuj nim tło labela (lub dowolnego innego komponentu). Taka sama metoda jest używana do tworzenie komponentów lub okienek o nieprostokątnym kształcie. Wadą rozwiązania jest dwukrotne odmalowywanie tego samego obszaru ekranu - raz przez metodę odrysowującą obrazek na kontenerze, a drugi raz w komponencie gui. Ta wada staje się nieakceptowalna jeżeli położenie labeli musi być przesuwane w czasie rzeczywistym (np. animowane). Efektem będzie wtedy migotanie odmalowywanego obszaru.
Sposób 2:
Szukasz po źródle kodu labela gdzie jest instrukcja odmalowująca cały obszar komponentu za pomocą koloru tła (w J2SE byłoby to fillRect lub clearRect). Jeżeli nie znajdziesz na pierwszym poziomie, to szukasz w przodku. Następnie tworzysz "od nowa" komponent taki jak label dziedzicząc od najstarszego przodka (może użyć oryginalnych źródeł*), w którym odmalowywanie komponentu występuje. Jednak znalezione odmalowywanie usuwasz w swojej wersji. W kontenerze używasz tak spreparowanego elementu , więc każde odmalowanie pozostawi w miejscu tła labela "dziurę" (reszta powinna się prawidłowo odmalować). Miejsce dziury powinno być (z automatu) wypełniane w kolejności odmalowywania - czyli przez kontener. W ten sposób nic nie robiąc uzyskasz właściwy efekt. Zarówno kontener jak i label powinny być "lekkie". Inaczej odmalowywanie tła może być wymuszone niżej (np. przez system lub trudno dostępną część kodu Javy). Zaletą jest to, że na wolnych urządzeniach graficznych "nic nie robienie" jest bardzo szybkie. :)
W niektórych przypadkach żeby osiągnąć ten sam efekt wystarczy skorzystać z normalnego dziedziczenia i możliwości javowego gui.
legalność dyskusyjna
Usunąć wpis?
Tej operacji nie będzie można cofnąć.
piter
piter
0
problem rozwiązany, dziękuję za pomoc/
Usunąć wpis?
Tej operacji nie będzie można cofnąć.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.