0% found this document useful (0 votes)
27 views

Laborator 11

The document discusses Java Swing JList components. It describes how to create and initialize a JList, select entries in the list, add and remove entries, format cells, and listen for selection events. It also outlines some example problems to solve with JLists, such as creating lists with different selection modes and cell rendering.

Uploaded by

gheorghe gardu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
27 views

Laborator 11

The document discusses Java Swing JList components. It describes how to create and initialize a JList, select entries in the list, add and remove entries, format cells, and listen for selection events. It also outlines some example problems to solve with JLists, such as creating lists with different selection modes and cell rendering.

Uploaded by

gheorghe gardu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

Poo Laboratoare

1
Contents
Laborator11 2
1 Liste de select ie JList 2
1.1 Crearea unui model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Init ializarea unei liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Selectarea intrarilor dintr-o lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Adaugarea si stergerea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.5 Formatarea celulelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.6 Jlist API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Probleme de laborator 4
2.1 Problema 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Problema 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3 Problema 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.4 Problema 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.5 Problema 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.6 Problema 6 (bonus) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1
http://www.google.ro/
1
Laborator11
Programare Orientata pe Obiecte: Laborator 11
1 Liste de select ie JList
Un obiect de tip JList prezinta utilizatorului un grup de item-uri, asate n una sau mai multe coloane
pentru a oferi acestuia posibilitatea de a alege.
1.1 Crearea unui model
Exista trei metode prin care se poate crea un model de lista:
DefaultListModel - aproape totul este gestionat de model pentru a usura munca programatorului
AbstractListModel - utilizatorul gestioneaza datele si invoca metodele de act ionare. Pentru
aceasta abordare, programatorul trebuie sa subclaseze AbstractListModel si sa implementeze
metodele getSize() si getElementAt() mostenite din interfat a ListModel
ListModel - utilizatorul gestioneaza totul
1.2 Init ializarea unei liste
Iata un exemplu de cod care creeaza si seteaza parametrii unei liste:
list = new JList( data ); //data e de tipul Object[ ]
list.setSelectionMode( ListSelectionModel.SINGLE INTERVAL SELECTION );
list.setLayoutOrientation( JList.HORIZONTAL WRAP );
list.setVisibleRowCount( -1 );
...
JScrollPane listScroller = new JScrollPane( list );
listScroller.setPreferredSize( new Dimension( 250, 80 ) );
Codul paseaza un vector catre constructorul listei. Vectorul cont ine siruri de caractere, care n exemplul
de fat a reprezinta nume de baiet i.
Alt i constructori pentru JList permit init ializarea listei dintr-un obiect de tip Vector sau dintr-un
obiect de tipul ListModel. Daca init ializarea se face dintr-un obiect de tip Vector sau dintr-un vector
clasic, constructorul implicit creeaza un model standard de lista. Modelul standard este imuabil - nu
se pot adauga, sterge, nlocui intrari n lista. Pentru a crea o lista a carei intrari pot modicate
individual, se poate seta modelul listei catre o instant a variabila, cum ar DefaultListModel. Modelul
unei liste se poate seta cand se creeaza lista sau prin apelul de metoda setModel().
Apelul setSelectionMode() specica cate intrari din lista poate selecta ultilizatorul si daca acestea
trebuie sa e sau nu contigue.
Apelul setLayoutOrientation() permite asarea datelor n mai multe coloane. Valoarea
JList.HORIZONTAL WRAP specica faptul ca lista ar trebui sa si aseze intrarile de la stanga
la dreapta nainte de a trece la o noua linie. O alta valoare posibila este JList.VERTICAL WRAP,
care specica asarea datelor de sus pana jos (ca de obicei) nainte de a trece la o coloana noua.

In combinat ie cu apelul setLayoutOrientation(), invocarea metodei setVisibleRowCount( -1 ) ofera


listei posibilitatea de asare a numarului maxim de intrari cuprins n spat iul disponibil pe ecran. O alta
utlizare pentru setVisibleRowCount() este aceea de a indica panoului de scroll-ing asociat listei cate
randuri sa aseze.
2
1.3 Selectarea intrarilor dintr-o lista
O lista utilizeaza o instant a de ListSelectionModel pentru a-si gestiona select ia. Implicit, modelul de
select ie a unei liste permite select ia oricarei combinat ii de intrari la un moment dat. Se poate specica
un mod diferit de select ie prin apelul metodei setSelectionMode():
SINGLE SELECTION - numai o singura intrare poate selectata la un moment dat. Cand
utilizatorul selecteaza o intrare, orice intrare anterior aleasa este deselectata
SINGLE INTERVAL SELECTION - intrari multiple si contigue pot selectate. Cand uti-
lizatorul ncepe un nou interval de select ie, orice intrari anterior alese sunt deselectate
MULTIPLE INTERVAL SELECTION - mod implicit. Orice combinat ie de intrari poate
selectata. Utilizatorul trebuie sa deselecteze explicit intrari.
Indiferent de modelul de select ie folosit de lista, aceasta genereaza evenimente de select ie de ecare
data cand select ia se schimba. Aceste evenimente pot procesate prin adaugarea unui ascultator la
lista folosind metoda addListSelectionListener(). Acest ascultator trebuie sa implementeze o metoda:
valueChanged().
Iata un exemplu:
public void valueChanged( ListSelectionEvent e ) {
if( e.getValueIsAdjusting() == false ) {
if( list.getSelectedIndex() == -1 ) {
fireButton.setEnabled( false );
} else {
fireButton.setEnabled( true );
}
}
}
Multe evenimente de select ie pot generate de o singura act iune a utilizatorului, cum ar un clic cu
mouse-ul. Metoda getValueIsAdjusting() returneaza true daca utilizatorul nca manipuleaza select ia.
Programul de mai sus este interesat doar de rezultatul nal al act iunii utilizatorului si de aceea metoda
valueChanged() cont ine secvent a de cod doar daca getValueIsAdjusting() ntoarce false.
Deoarece lista este n modul SINGLE SELECTION, acest cod poate utiliza metoda getSelectedIn-
dex() pentru a obt ine indexul intrarii tocmai selectate. JList pune la dispozit ie si alte metode pentru a
seta sau a obt ine select ia cand se pot alege mai multe intrari. De asemenea, se pot asculta evenimente
direct pe modelul de select ie, daca acest lucru este dorit.
1.4 Adaugarea si stergerea
listModel = new DefaultListModel();
listModel.addElement( Debbie Scott );
listModel.addElement( Scott Hommel );
listModel.addElement( Alan Sommerer );
list = new JList( listModel );
Programul de mai sus utilizeaza o instant a DefaultListModel.

In ciuda numelui, lista nu det ine un
DefaultListModel decat daca acest lucru este setat explicit din program. Daca DefaultListModel nu
este potivit nevoilor programatorului, se poate scrie un model customizat dar care trebuie sa adere la
interfat a ListModel.
Alta metoda de adaugare, cu specicare exacta a pozit iei de inserare, este:
listModel.insertElementAt( employeeName.getText(), index );
Stergerea este de asemenea, foarte simpla:
3
listModel.remove( index );
Indiferent daca sunt adaugate, sterse sau modicate intrari, modelul listei declanseaza evenimente.
Pentru mai multe informat ii despre acest subiect consultat i adresa
2
.
1.5 Formatarea celulelor
O lista foloseste un obiect numit Cell Renderer pentru a-si asa intrarile. Cel implicit stie sa aseze
siruri de caractere si imagini si aseaza tipul Object invocand metoda toString(). Daca se doreste
schimbarea modului n care se face asarea sau daca se doreste un comportament diferit fat a de cel
oferit de toString(), se poate implementa un Cell Renderer customizat. Pasii ce trebuie urmat i sunt:
scrierea unei clase care implementeaza interfat a ListCellRenderer
crearea unei instant e de clasa si apelarea metodei setCellRenderer() pentru lista, folosind
instant a ca argument
1.6 Jlist API
Pentru vizualizarea completa a API-ului consultat i documentat ia ociala de la Sun
3
.
2 Probleme de laborator
2.1 Problema 1
(2 puncte) Sa se scrie un program care permite introducerea unui nume de director ntr-un camp text
si aseaza lista sierelor din director ntr-o lista de select ie JList (daca exista acel director). Lista
de select ie este reinit ializata la ecare modicare a campului text (nu se prelungeste cu alte nume de
siere). Constructorul obiectului JList primeste un obiect Vector.
2.2 Problema 2
(2.5 puncte) Sa se adauge programului anterior nca un camp text n care se va asa numele sierului
selectat de utilizator (prin clic pe mouse) din lista de select ie (cu toate sierele din director). Fiecare
camp text este nsot it de o eticheta (mai exact Directory, repectiv Selected). Cele doua campuri si
cele doua etichete se plaseaza ntr-un panou separat (cu asezare GridLyout). Asezarea n fereastra
principala este FlowLayout. Pentru a evita producerea unei except ii se va adauga la nceputul metodei
valueChanged() din obiectul ascultator ListSelectionListener secvent a:
if( list.isSelectionEmpty() ) return; // Jlist list
Sa se adauge apoi o clasa Renderer astfel ncat atunci cand o celula este selectata sa apara alb pe
rosu, iar cand nu este selectata verde pe alb.
2.3 Problema 3
(2 puncte) Sa se modice programul anterior prin nlocuirea campului text pentru sierul selectat
cu o alta lista JList, la care se adauga sierele selectate din prima lista. Pentru a evita asarea
repetata a sierelor selectate (la apasarea si ridicarea butonului de mouse) se va introduce n metoda
valueChanged() secvent a:
2
http://java.sun.com/docs/books/tutorial/uiswing/events/listdatalistener.html
3
http://java.sun.com/javase/6/docs/api/javax/swing/JList.html
4
if( e.getValueIsAdjusting() ) return; // ListSelectionEvent e
2.4 Problema 4
(2 puncte) Sa se modice programul de la punctul 2 prin adaugarea unui buton de stergere a sierelor
selectate (din lista tuturor sierelor din directorul specicat), astfel ca n lista asata sa ramana numai
sierele dorite. Se va actualiza si un camp text cu numarul sierelor ramase (cele asate n lista). Se
poate elimina a doua lista de select ie. Fisierele selectate nu vor sterse efectiv de pe disc, ci numai
din lista asata.
2.5 Problema 5
(1.5 puncte) Sa se modice programul de la punctul 4 prin nlocuirea obiectului Vector cu un obiect
DefaultListModel pentru a memora sierele selectate din lista asata. Acest obiect este transmis la
construirea unui obiect JList.
2.6 Problema 6 (bonus)
(2 puncte) Sa se adauge programului de la punctul 2 posibilitatea de a naviga prin sistemul de siere:
la selectarea unui subdirector se muta numele acestuia n campul text si se aseaza n JList cont inutul
sau. Pentru revenire la directorul parinte se aseaza n JList si numele acestuia ca .. (doua puncte).
5

You might also like