This shows you the differences between two versions of the page.
poo:laboratoare:11 [2017/10/30 20:59] 127.0.0.1 external edit |
poo:laboratoare:11 [2021/12/15 15:09] (current) mihai.nan |
||
---|---|---|---|
Line 1: | Line 1: | ||
===== Laboratorul 11. ===== | ===== Laboratorul 11. ===== | ||
+ | === Problema 1 === | ||
+ | Pornind de la clasa **//Book//**, pusă la dispoziție în arhiva laboratorului, realizați o listă, obiect de tip **//JList//**, care să afișeze o serie de cărți. | ||
+ | În implementare, constructorul obiectului **//JList//** primește ca parametru un obiect de tip **//Vector//**, care o să conțină elemente de tip **//Book//**. | ||
+ | |||
+ | <note important>Lista va afisa pentru fiecare carte titlul si autorul (numele icon-ului corespunzator va fi sirul vid "")! | ||
+ | Lista trebuie sa fie una scrolabila. | ||
+ | </note> | ||
+ | |||
+ | {{:poo:laboratoare:prob1.png|}} | ||
+ | |||
+ | ===Problema 2=== | ||
+ | |||
+ | Modificați aplicația realizată la problema anterioară, folosind de această dată, în loc de un obiect de tip **//Vector//**, un obiect de tip **//DefaultListModel//**. | ||
+ | De asemenea, adaugați două câmpuri text și doua etichete pentru titlul cărții și autor. Cele patru elemente se vor plasa într-un panou separat. | ||
+ | Adaugați listei un ascultător de tip **//ListSelectionListener//**. Atunci când utilizatorul va selecta un câmp al listei, trebuie să se introducă informațiile aferente cărții selectate în cele două câmpuri text. | ||
+ | |||
+ | Pentru a evita producerea unei exceptii, uzitati codul de mai jos. | ||
+ | <code java> | ||
+ | @Override | ||
+ | public void valueChanged(ListSelectionEvent e) { | ||
+ | //JList listBook - membrul al clasei | ||
+ | if(listBook.isSelectionEmpty()) | ||
+ | return; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | <note tip>GridLayout</note> | ||
+ | |||
+ | {{:poo:laboratoare:prob2.png|}} | ||
+ | |||
+ | ===Problema 3=== | ||
+ | Pentru aplicația anterioară, implementați o modalitate de ștergere a unei celule selectate; operația se va executa la apăsarea unui buton adăugat pentru aceasta. | ||
+ | |||
+ | {{:poo:laboratoare:prob3.png|}} | ||
+ | |||
+ | ===Problema 4=== | ||
+ | Realizați o aplicație care să permită afișarea tuturor fișierelor dintr-un director. Aceasta va conține, în partea stângă, un obiect de tip **//JTree//** ce va afișa directoarele și fișierele aflate în directorul părinte pe care dorim să îl explorăm, iar în partea dreapta un tabel, obiect de tip **//JTable//**, care va conține informații detaliate pentru fiecare fișier din directorul selectat. Mai exact, tabelul va avea următoarele câmpuri: numele, dimensiunea, data ultimei modificări și tipul. | ||
+ | |||
+ | {{:poo:laboratoare:aplicatie2.png|}} | ||
+ | |||
+ | |||
+ | ===Problema 5=== | ||
+ | |||
+ | Pornind de la aplicația implementată la problema precedentă, să se adauge două JTextField-uri în care se vor completa numărul liniei şi respectiv al coloanei selectate din JTable. | ||
+ | |||
+ | Pentru aceasta se vor defini două clase ascultător ANONIME compatibile cu interfața **//ListSelectionListener//**, în care se va implementa metoda **//valueChanged()//**, cu argument de tip **//ListSelectionEvent//**. | ||
+ | |||
+ | Se vor adăuga cele două clase ascultător anonime la obiectele **//ListSelectionModel//** pentru modelul pe linii, respectiv pe coloane al tabelului, modele care vor fi extrase cu metoda **//getSelectionModel()//** (vezi exemplu şi curs). | ||
+ | |||
+ | Exemplu: | ||
+ | <code java> | ||
+ | ListSelectionModel rowSM = table.getSelectionModel(); | ||
+ | ListSelectionModel colSM = table.getColumnModel().getSelectionModel(); | ||
+ | </code> | ||
+ | |||
+ | {{:poo:laboratoare:prob5.png?700|}} | ||
+ | ===Problema 6=== | ||
+ | |||
+ | Să se adauge aplicației de la problema 2 o clasă **//BookRenderer//**, care să extindă **//JPanel//** și să implementeze **//ListCellRenderer//**. Această clasă va conține trei obiecte de tip **//JLabel//** (Titlul, Autorul si Imaginea), pentru a schimba aspectul listei inițiale. De această dată, pentru fiecare carte vom afișa titlul, autorul, dar și imaginea aferentă. Atunci când o celulă este selectată o să apară pe fundal rosu, iar când nu este selectată verde dacă este pe o poziție pară și galben dacă este pe una impară. | ||
+ | |||
+ | <code java> | ||
+ | icon.setIcon(new ImageIcon("Imagini/" + book.getIconName() + ".jpg")); | ||
+ | </code> | ||
+ | |||
+ | {{:poo:laboratoare:aplicatie.png|}} | ||
+ | |||
+ | {{:poo:laboratoare:laborator11.zip|Arhiva laborator}} |