Sunteți pe pagina 1din 14

9.

Controale cu list
Componentele Swing folosite limbajul Java ncepnd cu versiunea 1.2 implementeaz arhitectura Model-View-Controller (MVC). Modelul MVC const n esen n separarea datelor de reperezentarea lor. Datele sunt coninute ntr-un obiect (model) asociat unui control Windows care realizeaz reprezentarea lor (view). Cea dea treia component, Controller realizeaz interceptarea i procesarea evenimentelor. Controller

View

Model

Aceast abordare st de altfel la baza independenei aplicaiilor Java de platforma pe care se execut aplicaia. Dac pentru controale simple obiectul care conine datele este realizat automat pentru controale complexe, care pot conine un numr mare i variat de obiecte (JComboBox, JList, JTable, JTree), programatorul poate opta ntre folosirea unui obiect aparinnd unei clase implicite (DefaultListModel, DefaultTableModel, DefaultTreeModel) i definirea unei clase proprii, derivat dintr-o clas abstract predefinit sau nederivat. soluie. 9.1 JComboBox Controlul de tip JComboBox permite selectarea unei valori dintr-o list predefinit. Definirea listei se realizeaz de obicei n etapa de proiectare a aplicaiei, coninutul acesteia fiind accesibil prin intermediul proprietii model, construit i editat i dinamic, n timpul execuiei, folosind metodele: Lista poate fi Evident complextitatea programrii crete dac nu se folosete clasa implicit, dar n cazul unor reprezentri mai deosebite este singura

128

Tip returnat void void Object int void void void int

Metoda addItem(Object obj) insertItemAt(Object obj, int index) getSelectedItem() getSelectedIndex() removeAllItems() removeItem(Object obj) removeItemAt(int index) getItemCount()

Aciune Adaug un element n list Insereaz un element n list Returneaz ob. selectat Returneaz poz. elem. selectat Golete lista Suprim prima apariie a obj. Suprim el.. de la poziia index Returneaz nr. de elemente

Exemple: S se realizeze o aplicaie care afieaz n ferestr o imagine selectat dintr-o list de imagini. Pentru rezolvarea problemei se realizeaz o nou aplicaie Windows n fereastra creia se adaug trei controale: dou de tip JLabel i unul de tip JComboBox.

Lista asociat controlului de tip JComboBox va fi adugat acionnd butonul din dreptul proprietii model.

129

Proprietatea selectedItem va fi "Pasare", deci prima intrare n list. n controlul imagine de tip JLabel va fi adugat imaginea corespunztoare entitii iniial selectate ("Pasare"). Pentru aceasta va fi ters irul de caractere din dreptul proprietii text i vor fi impuse dimensiunile controlului n coresponden cu cele ale imaginilor care urmeaz s fie afiate (proprietile Horizontal Size i Vertical Size).

Pentru a aduga imaginea care va fi iniial afiat va fi acionat butonul din dreptul proprietii icon.

130

Pentru a putea funciona mai trebuie doar s se adauge clasei o metod care s fie apelat la schimbarea elementului din list selectat. selectarea unui alt element din list este actionPerformed. Evenimentul generat la

131

Formarea numelui imaginii care va fi afiat n controlul imagine se realizeaz prin alturarea a trei iruri de caractere: "Imagini/" + nume + ".gif". Variabila nume primete ca valoarea irul de caractere selctat. Rezult deci c n directorul Imagini trebuie s existe patru fiiere avnd denumirile Pasare.gif,

Pentru ca aplicaia s poat funciona, directorul Imagini trebuie plasat n directorul aplicaiei.

Observaie: Aplicaia poate fi rescris, n noua variant lista controlului de tip JComboBox fiind generat n timpul execuiei programului. n acest caz iniializarea el se va realiza n constructorul clasei.

132

Dup secvena de iniializare s-a impus poziia iniial selectat (metoda setSelectedIndex() din clasa JComboBox) i s-a ncrcat n controlul imagine de tip JLabel imaginea corespunztoare (metoda setIcon()).

9.2 JListBox Controlul de tip JListBox permite s se selecteze o valoare sau mai multe valori dintr-o list predefinit. i n cazul acestui control, definirea listei poate fi realizat n etapa de proiectare a aplicaiei sau ulterior, n timpul execuiei. Dac aplicaia se dezvolt folosind NetBeans, obiectul folosit ca model difer pentru cele dou situaii..n cazul n care lista este definit n momentul proiectrii aplicaiei mediul va creea un obiect aparinnd unei clase interioare anonime care implementeaz interfaa AbstractListModel:

Metoda setModel(Object obj) realizeaz asocierea obiectului model, care conine datele care urmeaz s fie afiate de controlul listaStg din clasa JList. Metodele getSize() i getElementAt() sunt metode suprascrise ale interfeei AbstractListModel. Pentru a accesa coninutul obiectului model se apeleaz metoda getModel(). Astfel pentru a prelua elementul aflat n poziia poz se scrie:

String sir; sir = (String) listaStg.getModel().getElementAt(poz); Pentru liste generate dinamic, n timpul execuiei aplicaiei, soluia obinuit este adugarea la variabilele clasei a unui obiect din clasa DefaultListModel: private DefaultListModel model_lista;

133

n constructorul clasei, dup iniializarea tuturor componentelor se va creea obiectul ldr i apoi va fi asociat controlului prin apelul metodei setModel():

... initComponents(); model_lista = new DefaultListModel(); lista.setModel(model_lista); ...

Principalele metode din clasa DefaultListModel care permit crearea i editarea listei sunt prezentate n tabelul urmtor. Tip returnat void void void boolean Object Object int[] int void boolean void void Metoda add(int index, Object obj) addElement(Object obj) clear() sau removeAllElements() contains(Object obj) firstElement() getElementAt (int index) getSelectedIndices() indexOf(Object obj) insertElementAt(Object obj, int index) isEmpty() removeElement(Object obj) removeElementAt(int index) Exemplu: Suprim elementul din poziia index Return. true daca lista este vida Suprim elem. obj Ret. true daca obj este in lista Ret. primul element Returneaz el. din poz. index Returneaz irul poziiilor el. selectate Ret. poz. n care apare prima dat obj Insereaz obj n poz. index Aciune Adaug obj n poz. index Adauga obj n list Golete lista

134

S se realizeze o aplicaie care adaug ntr-o list elemente selectate ntr-o alt list. Se presupune c prima list, din stnga, conine ingrediente pentru o pritur. Ingredientele selectate vor fi adugate n lista din dreapta.

Pentru realizarea interfeei s-au adugat ferestrei iniiale dou panouri (JPanel) avnd proprietatea border setat pe TitleBorder:

135

n continuare se adaug dou controale de tip JList, listaStg i listaDr i un buton. Se va observa c fiecare control de tip JList va fi n mod automat inclus ntr-un container de tip jScrollPanel. Dac lungimea unei liste va fi aa de mare nct nu va ncpea n spaiul iniial alocat vor fi afiate automat bare de defilare (scroll). Pentru a pstra elementele listei din dreapta, gestionat dinamic, se va aduga clasei variabila ldr aparinnd clasei DefaultListModel:

136

Se va modifica apoi constructorul clasei asfel nct ldr s fie asociat listei din dreapta, listaDr.

Pentru ca aplicaia s devin funcional mai trebuie ataat o metod de tratare a evenimentului clic pentru butonul jButton1.

Metoda conine preluarea n irul select[] de tip int a indicilor elementelor selectate n listaStg. Apoi se golete listaDr (metoda clear()) i se adaug n obiectul ldr elementele din lista din stnga ale cror poziii au fost memorate n irul select[]. Pentru aceasta se apeleaz n ciclu metoda addElement(). Preluarea unui element din lista din stnga se realizeaz apelnd metoda getElement() pentru obiectul model obinut prin apelul metodei getModel().

137

9.3 Jtable Controlul de tip JTable este folosit pentru afiarea datelor ntr-o form tabelar. Un obiect de tip JTable realizeaz doar afiarea datelor, acestea fiind coninute ntr-un obiect asociat (TableModel, de regul un tablou bidimensional).

JTable

TableModel

Clasa JTable conine multe metode, n cele ce urmeaz fiind prezentate i exemplificate doar cteva dintre ele. n NetBeans adugarea unui obiect din clasa JTable provoac inserarea n fapt a dou obiecte, un jScrollPanel (container) i un jTable coninut n primul.

Controlul este afiat cu un numr de linii i coloane care poate fi adaptat accesnd proprietatea model.

138

Rezultat:

Secvena de cod scris de mediul de programare n metoda initComponents() este urmtoarea:

139

Asocierea modelului s-a realizat prin apelul metodei setModel(), care are ca parametru un obiect din clasa DefaultTableModel. Deoarece acest obiect nu poate fi accesat n continuare prin nume, pentru modificarea datelor din tabel obiectul model va fi obinut prin apelul metodei getModel(). n tabelul urmtor au fost incluse cteva dintre metodele folosite pentru editarea obiectului model aparinnd clasei DefaultTableModel i asociat unui JTable. Tip returnat void Object int void void void

Metoda addRow(Object[] obj) getValueAt(int linie, int col) getRowCount() insertRow(int linie, Object[] obj) removeRow(int linie) int col)

Aciune Adaug modelului o linie la sfrit Preia valoarea din poz. (linie, col) Returneaz nr. de linii Insereaz un rnd n poziia linie Suprim rndul linie coloan)

setValueAt(Object obj, int linie, Insereaz elementul obj n poziia (linie,

Exemple de utilizare:

Pentru a creea un obiect din clasa DefaultTableModel s-a apelat un constructor avnd doi parametri. Primul parametru este un ir de obiecte coninnd numele coloanelor iar al doilea indic numrul de linii. Numrul de linii s-a luat 0 deoarece liniile

140

sunt adugate ulterior folosind metoda addRow(). Rezultat:

Pentru asocierea obiectului care

conine datele (model) la obiectul jTable1 s-a apelat metoda setModel().

141

S-ar putea să vă placă și