Differences

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

Link to this comparison view

poo:laboratoare:09 [2023/12/09 11:43]
carmen.odubasteanu
poo:laboratoare:09 [2025/11/30 17:22] (current)
george.tudor1906
Line 1: Line 1:
-===== Laboratorul 12. =====+====== ​Laborator 9 ====== 
 +{{:​poo:​laboratoare:​arhiva_laborator_-_swing_1.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!+ 
 +Să se realizeze un program care afișează patru câmpuri text și un buton. În primele trei câmpuri textutilizatorul introduce numele discului suport (A:, C:, D:), calea (secvența de directoare) șnumele unui fișier. La apăsarea pe buton se va afișa, în cel de-al patrulea câmp textcalea completă la fișier. 
 + 
 +În implementare,​ se vor scrie următoarele două variante: 
 + 
 +  ​Se înregistrează trei obiecte ascultător (**ActionListener**) câte unul pentru fiecare **JTextField**, care transferă textul din fiecare câmp text în cel destinat rezultatului. 
 +  ​Se înregistrează un singur obiect ascultător la **JButton**, care va compune datele din primele 3 câmpuri și le va afișa în cel destinat rezultatului. 
 + 
 +<note tip> 
 +Trecerea de la un câmp text la altul se va putea face și cu tasta Tab. Însă evenimentul de tip **ActionEvent** pentru un **JTextField** se generează la apăsarea lui Enter! 
 +</note> 
 + 
 +=== Problema 2 === 
 + 
 +Să se realizeze un program care citește dintr-un fișier o întrebare urmată de 4 răspunsuri posibile, unul singur fiind corect (primul indicat în fișier), și afișează un câmp text nemodificabil,​ care va conține enunțul întrebării,​ patru butoane de tip **JRadioButton**, grupate într-un grup de butoane (**ButtonGroup**), conținând răspunsurile posibile, ​și un buton pentru validarea răspunsului selectat. 
 + 
 +Butonul de validare este de tip **JButton** și este accesibil doar după ce a fost ales un răspuns. În cazul în care răspunsul selectat este corect, se va aplica textului răspunsului culoarea verde, iar, în caz contrar, i se va aplica răspunsului corect culoarea roșie.
  
 <code java> <code java>
-public class Binding{ +@Override 
-    public ​static ​void main(String args[]) { +public void actionPerformed(ActionEvent e) { 
-        Hero h1 = new Warrior(), h2 = new Ninja(); +    ​if ​(e.getSource() instanceof JRadioButton{ 
-        Hero h3 = new Rogue(); +        ​button.setEnabled(true);
-        BadLuck bl = new StormFire();​ +
-        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//​** ​ș**//BadLuck//** sunt clase abstracte!</​note>​+<​note ​important> 
 +Fișier de intrare: ​**intrebare.txt** 
 +</​note>​
  
-=== Problema ​=== +=== Problema ​=== 
-Să se definească o clasă **__generica__** **//ArrayMap//**, pentru un dicționar realizat din doi vectori (un vector ​de chei și un vector ​de valori asociateobiecte din clasa **//Vector//​**), ​care să poată înlocui o clasă **//HashMap//** sau **//TreeMap//**. Astfel, această clasă va extinde clasa **//AbstractMap//**, suprascriind următoarele metode:+ 
 +Modificați programul implementat la exercițiul anterior, pentru afișarea unor casete cu bifare, **JCheckBox**. Astfel, de această dată vom avea un program care permite uzitarea unor întrebări cu răspunsuri corecte multiple. 
 + 
 +Toate cele patru casete de tip **JCheckBox** vor avea un singur ascultător de tip **ItemListener**,​ cu o metodă ​//itemStateChanged()// și cu un argument de tip **ItemEvent**. 
 + 
 +Butonul ​de validare este de tip **JButton** ​și este accesibil doar după ce a fost ales un răspuns. La apăsarea butonului ​de validare se va aplica textelor răspunsurilor corecte culoarea verdeiar celor incorecte li se va aplica culoarea roșie. 
 + 
 +<note tip> 
 +Presupunem că sunt corecte primul și al treilea răspuns. 
 + 
 +Metodă utilă: ​//getSource()// 
 +</​note>​ 
 + 
 +=== Problema 4 === 
 + 
 +Să se implementeze o aplicație grafică cu 3 obiecte cursor, de tip **JSlider**, și un câmp text. Fiecare cursor corespunde ponderii unei culori (Red, Green, Blue), iar culoarea apare în câmpul text. 
 + 
 +Pentru fiecare obiect **JSlider**,​ trebuie ​să definiți următoarele: 
 +  * orientarea;​ 
 +  * valoarea minimă
 +  ​valoarea maximă; 
 +  ​valoarea inițială afișată (ca numere întregi). 
 + 
 +<note important>​ 
 +La deplasarea cursorului, se generează un eveniment de tip **ChangeEvent** și se apelează metoda ​//stateChanged//, dintr-un obiect ​**ChangeListener**
 + 
 +Valoarea ce corespunde poziției cursorului se poate obține cu metoda ​//getValue()// din clasa **JSlider**, ce are ca rezultat un //int//
 +</​note>​
  
 <code java> <code java>
-public String toString(); +slider = new JSlider(JSlider.HORIZONTAL0, 255, 0);
-public V put(K, V); +
-public V get(Object ); +
-public Set<​K>​ keySet(); +
-public Collection<​V>​ values(); +
-public Set<Map.Entry<KV>> 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 ​=== +=== Problema ​=== 
-Pornind de la clasa abstractă **//AMatrix//**, pusă la dispoziție în arhiva laboratoruluiimplementaț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 a două matrice, ​și metoda sum pentru ​aduna două elemente!.+ 
 +Program pentru afișarea unui buton cu inscripția "​Colors"​ și modificarea culorii acestuia ca urmare a efectuării unui click pe buton. 
 + 
 +Metoda ​//setForeground()// cu parametru de tip **Color** schimbă culoarea textuluiiar metoda ​//setBackground()// schimbă culoarea butonului. La fiecare click se va itera pe un vector de culori, inițializat ​cu constante (//Color.RED////Color.BLUE// etc). 
 + 
 +<note tip> 
 +Folosiți o fereastră **JFrame** cu dimensiuni mici (100, 100) și organizarea ​**FlowLayout**. 
 + 
 +Implementațși posibilitatea de acționare ​butonului prin combinația de taste **ALT+C**. 
 +</​note>​
  
 <code java> <code java>
-//afisare +buton.setMnemonic(KeyEvent.VK_C);
-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>​+=== Problema 6 ===
  
-=== Problema 4 === +Realizați o fereastră cu titlu, folosind ​**JFrame**care să conțină următoarele:​ 
-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ă ​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. ​ +  ​* o etichetă, având ca text "​Calea";​ 
-Metoda ​**//max//** are ca parametru tot un **//​ArrayList//​** și returnează elementul maximal din listă.  +  ​un **JTextField**
-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.+  ​* un **JButton**; 
 +  * un **JScrollPane** care să conțină un **JTextArea**, setat inițial ca fiind invizibil.
  
-<code c+După ce se va introduce o cale, către un fișier text aflat local pe disc, se va afișa conținutul acestui fișier în fereastră, uzitând componenta de tip **JTextArea**. 
-int BinarySearch(vstartendx) {  + 
-    //conditia de oprire (x nu se afla in v) +<note important
-    if (start ​end)  +Componenta de tip **JScrollPane** va deveni vizibilă la accesarea butonuluidacă există fișierul specificat local pe discîn caz contrarse va șterge conținutul din **JTextField**. 
-        ​return -1;  +</note
-    //​etapa divide + 
-    int mid = (start + end/ 2+<code java> 
-    //​etapa stapaneste +File f new File(path); 
-    ​if (v[mid] == x +if(f.exists(&& !f.isDirectory()) { 
-        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>​ </​code>​
-{{:​poo:​laboratoare:​arhiva9.zip|Arhivă laborator}}+
poo/laboratoare/09.1702114991.txt.gz · Last modified: 2023/12/09 11:43 by carmen.odubasteanu
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