05.23.08
Aplicaţii Swing - top-level containers
Majoritatea aplicaţiilor Java se scriu/programează cu ajutorul claselor din pachetul Swing care pune la dispoziţie trei clase “container” top-level. Aplicaţiile Swing sunt derivate/extensii ale acestor clase.
- JFrame
- JDialog
- JApplet
Utilizând aceste clase trebuie să ţinem cont de următoarele:
- pentru a apărea pe ecran, orice componentă a interfaţei grafice trebuie să fie o parte dintr-o “ierarhie de control”. O “ierarhie de control” este un arbore de componente care are un top-level container ca rădăcină (root).
- fiecare componentă a interfeţei grafice poate fi cuprinsă (inlusă) doar o singură dată, în interiorul altei componente. Dacă o componentă este deja inclusă într-un container, şi se încearcă o includere a ei şi într-un alt container, componenta va fi ştearsă/eliminată din primul container şi adăugată celui de-al doilea.
- fiecare container top-level va avea un “content pane” (panou de conţinut) care, în general vorbind, va conţine (direct sau indirect) componentele vizibile din acest “top-level container” al interfeţei grafice.
- opţional, se poate adăuga un “menu bar” (bară de meniuri), al unui container de nivel superior. Prin convenţie, bara de meniu este adăugată în partea de sus a container-ului, dar în afara “panoului de conţinut”. Unele “look and feels”, cum ar fi cel “Mac OS”, oferă posibilitatea de a poziţiona bara de meniuri într-un alt loc mai adecvat designului general al alicaţiei, cum ar fi în partea de sus a ecranului.
Atenţie! Deşi JInternatFrame “imită” JFrame, cadrele (frame) interne nu sunt, în realitate, top-level containere.
Mai jos, se prezintă un cadru (frame) creat de o aplicaţie. Cadrul conţine o bară de meniuri (dar nu cu meniuri) verde şi, în interiorul “panoului de conţinut”, un mare spaţiu gol, desenat cu galben (practic o componentă-etichetă JLabel galbenă).

Puteţi găsi întregul cod sursă TopLevelDemo.
Ierarhia containerelor pentru acest exemplu de interfaţă grafică simplă este:

Fiecare aplicaţie care utilizează componente Swing are cel puţin un container de nivel superior “top-level container”. Acest container “top-level” este rădăcină (root) a unei ierarhii de containere care conţine toate componentele care apar în interiorul containerului top-level.
Ca regulă, o aplicaţie standalone bazată pe interfaţă grafică Swing, are cel puţin o ierarhie de control cu un JFrame ca rădăcină. De exemplu, dacă o aplicaţie are o fereastră principală şi două ferestre de dialog, atunci aplicaţia va avea trei ierarhii şi deci trei containere top-level. O ierarhie va avea drept rădăcină JFrame, iar fiecare dintre celelalte două va avea un obiect JDialog ca rădăcină.
Un Applet bazat pe componente Swing are cel puţin o ierarhie de control, aceea care are ca rădăcină obiectul JApplet. De exemplu, un applet care apelează un dialog are două ierarhii. Componentele din fereastra browser-ului se află într-o ierarhie de control cu rădăcina în obiectul JApplet. Dialogul are o altă ierarhie de control, cu rădăcina în obiectul JDialog.