05.27.08
Swing şi modelele
Cele mai multe componente Swing au modele. De exemplu, un buton (JButton) are un model (un obiect ButtonModel) care stochează starea butonului - care este mnemonica lui de tastatură, dacă este activat (enabled), selectat sau apăsat, şi aşa mai departe. Unele componente au mai multe modele. De exemplu, o listă (JList) utilizează un ListModel pentru a reţine lista conţinutului şi un ListSelectionModel pentru a urmări lista selecţiilor curente.
Deseori, nu este nevoie să cunoşti nimic despre modelele pe care le utilizează o componentă. Spre exemplu, programele care utilizează butoane, fac apel direct la obiecte de tip JButton fără a face apel şi la obiecte ButtonModel.
Atunci, se pune întrebarea: de ce există modelele? Motivul principal este că ele oferă o mai mare flexibilitate în a stabili ce date sunt stocate şi/sau regăsite (returnate). De exemplu, dacă se proiectează o aplicaţie de spreadsheed (calcul tabelar) care să afişeze datele într-un tabel “slab populat”, se poate crea propriul model de tabel care să fie optimizat pentru o astfel de utilizare.
Modelele au şi alte beneficii/utilizări. Datele nu sunt copiate între un program de structuri de date şi cele ale componentelor Swing. De asemenea, modelele propagă automat modificările făcute în toate “listele de ascultare” (listeners) interesate, făcând-ul uşor pentru mediul GUI să rămână sincronizat cu datele manipulate. De exemplu, pentru a adăuga elemente într-o listă se poate apela la o metodă a modelului listei. Când se schimbă modelul datelor, modelul propagă evenimentele la JList, precum şi la alte “liste de ascultare” înregistrate, şi GUI este actualizat în consecinţă.
Deşi arhitectura modelelor Swing este uneori menţionată ca o implementare MVC (Model-View-Controller), nu este aşa. Componentele Swing sunt, în general implementate, astfel încât vederea şi controller-ul sunt indivizibile, implementate de un singur obiect UI furnizat de aspectul “look and feel”. Arhitectura modelului Swing poate fi, mai exact descrisă, ca o arhitectură cu modele separate. Pentru mai multe date despre modelul Swing, aici.