Jak zaimplementować GlassPane?

Jak zaimplementować GlassPane?
Antoniossss
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam

Ilekroć przysiądę do aplikacji desktopowej w Swingu, zawsze natrafię na jakiś problem, o którym do tej pory myślałem, że jest jakąś pierdołą.
W jaki sposób zaimplementować coś w stylu GlassPane ale w obszarze Panelu? Innymi słowy - jak rysować po JPanel aby one się nie odrysowywały.
Tak wiem nadpisz paint() albo paintComponent(). Też tak myślałem!. Tylko, że to nie pomogło..... childComponents rysują się nadal;/ Chciałem zrobić "screenszota" robotem obecnego komponentu i takiego go rysować, tylko nic mi po tym skoro childy się rysują;/
Miałem w aplikacji topornie zaimplementowany Preloader. Generalnie działał fajnie. Bardzo ładnie przykrywał np cały panel i wyświetlał animacje. Oparte toto było o GlassPane, także wiele instancji komponentów które potrzebowały preloadera "wyrywały" sobie dostęp do glass pane w taki sposób, żeby tylko widoczna kontrolka miała do niego dostęp. Oczywiście wyliczane tam były współrz1
ędne komponentu itd itp i rysowany był (bo GP) prostokąt przykrywający komponent. Problemy stwarza to 2 (przynajmniej).

  1. Preloader przykrywał wszystko nad komponentem, a więc również kontrolki których nie powinien (np rozwinięte menu)
  2. No nie ma siły, żeby lekkim sposobem uruchomić np 2 widoczne na ekranie preloadery lub więcej.

Trzecim może być toporna implementacja i kod "na pająka"

Antoniossss
  • Rejestracja: dni
  • Ostatnio: dni
0

Tak jak wspomniałem problem głupi - ale nie do końca ;P
Tutaj wyjątkowo należało nadpisać paint zamiast paintComponent aaaale pod wartunkiem, że pierwszym wywołaniem tam, będzie superPaint();
Zauważyłem dziwne zachowanie (chociaż pewnie normalne, tylko nie rozumiem działania repaintmanagera) polegające na tym, że na moim "preloaderze" rysowały się elementy które pysować się tam nie powinny, tak na przykład w punkcie 0,0 (panelu) rysował się widok całego JFrame - głównego okna. Mam również zegar w rogu aplikacji, to co repaint zegara(co sekunda) odrysowywał się on również na moim komponencie(powimo tego, że widnieje również tam gdzie powinien a więc jakieś dziwne klonowanie)
Generalnie efekt zamierzony osiągnięty, preloader przyciemnia content(fillRectangle z ustawioną alfą) i rusuje również przeźroczystą animacje.
Sorry for long post.

airborn
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 274
0

Czy Twoich problemów nie rozwiązał by JLayer dostępny od Javy 7? Mógłbyś tworzyć nakładkę nad dowolnym komponentem.

Antoniossss
  • Rejestracja: dni
  • Ostatnio: dni
0

A możliwe możliwe, nie wykluczam, ale chcę pozostać w jdk 6: )

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.