Differences

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

Link to this comparison view

poo:laboratoare:10 [2025/11/30 16:45]
george.tudor1906
poo:laboratoare:10 [2025/11/30 17:42] (current)
george.tudor1906
Line 1: Line 1:
-===== Laboratorul ​===== +===== Laboratorul ​10 =====
-**Atentie!** +
- +
-<​hidden>​ +
-Acest laborator se va rezolva acasa, de catre TOATA SERIA (inclusiv grupa de luni), +
-si se va prezenta la laboratoarele din saptamanile 5-9 dec sau 12-16 dec. +
-</​hidden>​ +
- +
- +
- +
-Primele 2 probleme sunt rezolvate, testati-le si apoi rezolvati si celelalte probleme din laborator.  +
- +
-Folositi pentru aceasta exemplele de rezolvari de la primele 2 probleme. +
-{{:​poo:​laboratoare:​laborator_swing_1_rezolvari1_2.zip| Arhiva rezolvari problema 1 si 2}}  +
-  +
- +
-Rezolvarile vor tine cont de indicatiile de la curs 9 - vezi ultimul slide din curs - si anume, folosim direct componentele si optiunile Swing, nu doar AWT!+
  
 +{{:​poo:​laboratoare:​laborator11.zip|Arhiva laborator}}
  
 === Problema 1 === === 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. ​
  
-Sa se realizeze ​un program care afiseaza patru campuri text si un buton. +În implementare,​ constructorul obiectului **//​JList//​** primește ca parametru ​un obiect ​de tip **//​Vector//​**care o să conțină elemente ​de tip **//​Book//​**.
-In primele trei campuri text, utilizatorul introduce numele discului suport (A:, +
-C:, D:), calea (secventa ​de directoare) si numele unui fisier. La apasarea pe +
-buton se va afisa, in cel de-al patrulea camp text, calea completa la fisier.+
  
-In implementare,​ se vor scrie urmatoarele doua variante: +<note important>​Lista va afisa pentru fiecare ​carte titlul ​si autorul (numele icon-ului corespunzator ​va fi sirul vid ""​)! 
-   * Se inregistreaza trei obiecte ascultator (ActionListener) cate unul pentru fiecare ​JTextField, care transfera textul din fiecare camp text in cel destinat rezultatului. +Lista trebuie sa fie una scrolabila. 
-   * Se inregistreaza un singur obiect ascultator la JButton, care va compune datele din primele 3 campuri ​si le va afisa in cel destinat rezultatului.+</​note>​
  
-<note important>​Trecerea de la un camp text la altul se va putea face si cu tasta TabInsa evenimentul de tip ActionEvent pentru un JTextField se genereaza la apasarea lui Enter! </​note>​+{{:​poo:​laboratoare:​prob1.png|}}
  
 +===Problema 2===
  
-=== 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 asemeneaadaugaț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.  
-Sa se realizeze un program care citeste dintr-un fisier o intrebare urmata +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.
-de 4 raspunsuri posibileunul singur fiind corect (primul indicat in fisier), si afiseaza ​un camp text nemodificabil,​ care va contine enuntul intrebarii, patru butoane ​de tip **JRadioButton**, grupate intr-un grup de butoane (**ButtonGroup**),continand raspunsurile posibile, si un buton pentru ​validarea raspunsului selectat+
-Butonul de validare este de tip JButton si este accesibil doar dupa ce a +
-fost ales un raspunsIn cazul in care raspunsul selectat este corect, se va aplica +
-textului raspunsului culoarea verdeiar, in caz contrar, i se va aplica raspunsului +
-corect culoarea rosie.+
  
 +Pentru a evita producerea unei exceptii, uzitati codul de mai jos.
 <code java> <code java>
 @Override @Override
- public void actionPerformed ​ActionEvent ​e ) { +public void valueChanged(ListSelectionEvent ​e) { 
-  if (e.getSource() instanceof JRadioButton ​{ +    //​JList listBook - membrul al clasei 
-    ​button.setEnabled(true); +    ​if(listBook.isSelectionEmpty())             ​ 
-  } +        ​return
- }+}
 </​code>​ </​code>​
  
-<​note ​importantintrebare.txt ​</​note>​+<​note ​tip>GridLayout</​note>​
  
-=== Problema 3 ===+{{:​poo:​laboratoare:​prob2.png|}}
  
-Modificati programul implementat ​la exercitiul anterior, ​pentru ​afisarea unor casete cu bifare, **JCheckBox**. Astfel, de aceasta ​data vom avea un program care permite uzitarea unor intrebari cu raspunsuri corecte multiple. Toate cele patru casete de tip **JCheckBox** vor avea un singur ascultator de tip **ItemListener**,​ cu o metoda **itemStateChanged()** si cu un argument de tip **ItemEvent**.+===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.
  
-Butonul de validare este de tip JButton si este accesibil doar dupa ce a fost ales un raspuns. La apasarea butonului de validare se va aplica textelor raspunsurilor corecte culoarea verde, iar celor incorecte li se va aplica culoarea rosie. Presupunem ca sunt corecte primul si al treilea raspuns.+{{:​poo:​laboratoare:​prob3.png|}}
  
-<note important>​ getSource() </note>+===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.
  
-=== Problema 4 ===+{{:​poo:​laboratoare:​aplicatie2.png|}}
  
-Sa se implementeze o aplicatie grafica cu 3 obiecte cursor, de tip **JSlider**,​ si un camp text. Fiecare cursor corespunde ponderii unei culori (Red, Green, Blue), iar culoarea apare in campul text. Pentru fiecare obiect JSlider, trebuie sa definiti urmatoarele:​ orientarea, valoarea minima, valoarea maxima si valoarea initiala afisata (ca numere intregi). 
  
-La deplasarea cursorului, se genereaza un eveniment de tip **ChangeEvent** si se apeleaza metoda **stateChanged**,​ dintr-un obiect **ChangeListener**. Valoarea ce corespunde pozitiei cursorului se poate obtine cu metoda **getValue()** din clasa **JSlider**,​ ce are ca rezultat un **int**.+===Problema 5===
  
-<note important>​ slider = new JSlider(JSlider.HORIZONTAlL,​ 0, 255, 0); </​note>​+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.
  
-=== Problema 5 ===+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//​**.
  
-Program pentru afisarea unui buton cu inscriptia Colors si modificarea culorii acestuia ca urmare a efectuarii unui click pe buton. Metoda ​**setForeground()** cu parametru de tip **Color** schimba culoarea textuluiiar metoda **setBackground()** schimba culoarea butonului. La fiecare click se va itera pe un vector de culoriinitializat ​cu constante (**Color.RED**,​ **Color.BLUE** etc). Folositi o fereastra ​**JFrame** cu dimensiuni mici (100, 100si organizarea **FlowLayout**. Implementati si posibilitatea de actionare a butonului prin combinatia de taste ALT+C.+Se vor adăuga cele două clase ascultător anonime la obiectele ​**//​ListSelectionModel//​** pentru modelul pe liniirespectiv ​pe coloane al tabeluluimodele care vor fi extrase ​cu metoda ​**//​getSelectionModel()//** (vezi exemplu şi curs).
  
-<note importantbuton.setMnemonic(KeyEvent.VK_C); </note>+Exemplu: 
 +<code java> 
 +ListSelectionModel rowSM = table.getSelectionModel(); 
 +ListSelectionModel colSM = table.getColumnModel().getSelectionModel(); 
 +</code>
  
-=== Problema 6 ===+{{:​poo:​laboratoare:​prob5.png?​700|}} 
 +===Problema 6===
  
-Realizati ​fereastra cu titlu, folosind ​**JFrame**, care sa contina urmatoarele:​ o eticheta, avand ca text Calea, un **JTextField**, un **JButton** si un **JScrollPane** care sa contina un **JTextArea**, setat initial ca fiind invizibil.+Să se adauge aplicației de la problema 2 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ă.
  
-Dupa ce se va introduce o cale, catre un fisier text aflat local pe disc, se va afisa continutul acestui fisier in fereastra, uzitand componenta de tip **JTextArea**.+<code java> 
 +icon.setIcon(new ImageIcon("​Imagini/"​ + book.getIconName() + "​.jpg"​));​ 
 +</​code>​
  
-Componenta de tip **JScrollPane** va deveni vizibila la accesarea butonului, daca exista fisierul specificat local pe disc, in caz contrar, se va sterge continutul din **JTextField**.+{{:​poo:​laboratoare:​aplicatie.png|}}
  
-<note important>​ File f = new File(path); 
- 
-if(f.exists() && !f.isDirectory()) { ... }  
-</​note>​ 
  
poo/laboratoare/10.1764513935.txt.gz · Last modified: 2025/11/30 16:45 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