Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo:laboratoare:10 [2025/11/30 16:51]
george.tudor1906
poo:laboratoare:10 [2025/11/30 17:42] (current)
george.tudor1906
Line 1: Line 1:
-===== Laboratorul ​12. =====+===== Laboratorul ​10 ===== 
 + 
 +{{:​poo:​laboratoare:​laborator11.zip|Arhiva laborator}}
  
 === Problema 1 === === Problema 1 ===
-Pornind de la codul de mai josasigurați faptul ​că se va apela codul aferent tipului dinamic al parametruluidefinind clasele ​**//Hero//**, **//Warrior//**, **//Ninja//**, **//Rogue//** și **//StormFire//**, în mod minimal!+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 rți.  
 + 
 +În implementareconstructorul 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 listeitrebuie 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> <code java>
-public class Binding{ +@Override 
-    public ​static ​void main(String args[]) { +public void valueChanged(ListSelectionEvent e) { 
-        Hero h1 = new Warrior(), h2 = new Ninja(); +    //​JList listBook - membrul al clasei 
-        Hero h3 = new Rogue(); +    if(listBook.isSelectionEmpty())             ​ 
-        BadLuck bl = new StormFire();​ +        ​return;
-        bl.execute(h1)+
-        bl.execute(h2); +
-        ​bl.execute(h3);​ +
-    } +
-+
- +
-abstract class BadLuck { +
-    abstract void execute(Hero h); +
-    abstract void execute(Warrior w); +
-    abstract void execute(Ninja n); +
-    abstract void execute(Rogue r);+
 } }
 </​code>​ </​code>​
  
-<​note ​warning>Clasele **//​Hero//​** și **//​BadLuck//​** sunt clase abstracte!</​note>​+<​note ​tip>GridLayout</​note>​
  
-=== Problema 2 === +{{:poo:​laboratoare:​prob2.png|}}
-Să se definească o clasă **__generica__** **//​ArrayMap//​**,​ pentru un dicționar realizat din doi vectori (un vector de chei și un vector de valori asociate, obiecte din clasa **//​Vector//​**),​ care să poată înlocui o clasă **//​HashMap//​** sau **//​TreeMap//​**. Astfel, această clasă va extinde clasa **//​AbstractMap//​**,​ suprascriind următoarele metode:+
  
 +===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> <code java>
-public String toString(); +ListSelectionModel rowSM = table.getSelectionModel(); 
-public V put(K, V)+ListSelectionModel colSM = table.getColumnModel().getSelectionModel();
-public V get(Object ); +
-public Set<​K>​ keySet(); +
-public Collection<​V>​ values(); +
-public Set<Map.Entry<K, V>> entrySet(); // atentie! Se va defini o clasa interna pentru o intrare in dictionar - **//​Map.Entry//​**+
 </​code>​ </​code>​
-Afișați dicționarul folosind System.out.println(dictionar) si apoi folosind un **//​Iterator//​** pentru a parcurge mulțimea intrarilor generată de metoda **//​entrySet//​**. 
  
-=== Problema ​=== +{{:​poo:​laboratoare:​prob5.png?​700|}} 
-Pornind ​de la clasa abstractă **//AMatrix//**, pusă la dispoziție în arhiva laboratorului,​ implementați clasa **//IntegerMatrix//** care moștenește această clasă abstractă ​și modelează un tablou bidimensional cu numere întregi. Clasa **//AMatrix//** moștenește clasa **//​ArrayList//**. Astfel, matricea propriu-zisă este un obiect de tip **//​ArrayList//​** care conține ​elemente ​de tip **//ArrayList//**. Clasa va conține metode ​pentru ​următoarele operații: ​afișarea matricei, adunarea ​două matrice, și metoda sum pentru a aduna două elemente!.+===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 rosuiar când nu este selectată verde dacă este pe o poziție pară și galben dacă este pe una impară.
  
 <code java> <code java>
-//afisare +icon.setIcon(new ImageIcon("​Imagini/" + book.getIconName() + "​.jpg"​));
-public String toString(); +
-//sum +
-public Integer sum(Integer obj1, Integer obj2 +
-//adunare +
-public AMatrix addition(AMatrix m);+
 </​code>​ </​code>​
  
-<note important>​Folosiți iteratori pentru parcurgerea colecțiilor sau bucle for each! </​note>​+{{:​poo:​laboratoare:​aplicatie.png|}}
  
-=== Problema 4 === 
-Definiți clasa **//​GenericListMethods//​** care să implementeze interfața, pusă la dispoziție în arhiva laboratorului,​ **//​GenericInterface//​**. Această interfață conține operații care prelucrează o listă, cu elemente de tip **//​Comparable//​**. Metoda **//​removeDuplicates//​** primește ca parametru un obiect de tip **//​ArrayList//​** și transformă lista într-on mulțime, eliminând duplicatele. ​ 
-Metoda **//max//** are ca parametru tot un **//​ArrayList//​** și returnează elementul maximal din listă. ​ 
-Ultima metodă conținută de interfață,​ **//​binarySearch//​**,​ este folosită pentru a determina poziția unei valori într-o listă ordonata, uzitând pentru aceasta algoritmul de căutare binară, detaliat în blocul de cod de mai jos. 
  
-<code c> 
-int BinarySearch(v,​ start, end, x) {  
-    //conditia de oprire (x nu se afla in v) 
-    if (start > end)  
-        return -1;  
-    //etapa divide 
-    int mid = (start + end) / 2; 
-    //etapa stapaneste 
-    if (v[mid] == x)  
-        return mid; 
-    if (v[mid] > x)  
-        return BinarySearch(v,​ start, mid-1, x); 
-    if (v[mid] < x)  
-        return BinarySearch(v,​ mid+1, end, x); 
-} 
-</​code>​ 
-{{:​poo:​laboratoare:​arhiva9.zip|Arhivă laborator}} 
poo/laboratoare/10.1764514315.txt.gz · Last modified: 2025/11/30 16:51 by george.tudor1906
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0