Differences

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

Link to this comparison view

poo:laboratoare:10 [2020/12/10 13:27]
carmen.odubasteanu
poo:laboratoare:10 [2025/11/30 17:42] (current)
george.tudor1906
Line 1: Line 1:
-===== Laboratorul 10=====+===== Laboratorul 10 ===== 
 + 
 +{{:​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===
  
-Sa se realizeze un program care citeste dintr-un fisier o intrebare urmata +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 4 raspunsuri posibileunul singur fiind corect (primul indicat in fisier), si afiseaza ​un camp text nemodificabilcare 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.+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.  
 +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> <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>​
  
 +{{:​poo:​laboratoare:​prob2.png|}}
  
-Butonul de validare este de tip JButton si este accesibil doar dupa ce a +===Problema 3=== 
-fost ales un raspuns. In cazul in care raspunsul selectat este corect, se va aplica +Pentru ​aplicația anterioarăimplementațo modalitate de ștergere a unei celule selectate; operația ​se va executa la apăsarea unui buton adăugat pentru aceasta.
-textului raspunsului culoarea verde, iar, in caz contrar, i se va aplica raspunsului +
-corect culoarea rosie.+
  
-=== Problema 3 ===+{{:​poo:​laboratoare:​prob3.png|}}
  
-Modificati programul implementat la exercitiul anteriorpentru 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 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.
  
-<note important>​ getSource() </​note>​+{{:​poo:​laboratoare:​aplicatie2.png|}}
  
-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. 
  
-=== Problema ​===+===Problema ​5===
  
-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).+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.
  
-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//**.+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//**.
  
-<note important>​ slider = new JSlider(JSlider.HORIZONTAlL0255, 0); </note>+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).
  
-=== Problema 5 ===+Exemplu: 
 +<code java> 
 +ListSelectionModel rowSM table.getSelectionModel();​ 
 +ListSelectionModel colSM table.getColumnModel().getSelectionModel();​ 
 +</​code>​
  
-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 textului, iar metoda **//​setBackground()//​** schimba culoarea butonului. La fiecare click se va itera pe un vector de culori, initializat cu constante (**//​Color.RED//​**,​ **//​Color.BLUE//​** etc). Folositi o fereastra **//​JFrame//​** cu dimensiuni mici (100, 100) si organizarea **//​FlowLayout//​**. Implementati si posibilitatea de actionare a butonului prin combinatia de taste ALT+C.+{{:​poo:​laboratoare:​prob5.png?​700|}} 
 +===Problema 6===
  
-<note important>​ buton.setMnemonic(KeyEvent.VK_C); </​note>​+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ă.
  
-=== Problema 6 === +<code java> 
- +icon.setIcon(new ImageIcon("​Imagini/"​ + book.getIconName() + "​.jpg"​));​ 
-Realizati o 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.+</code>
  
-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//​**.+{{:​poo:​laboratoare:​aplicatie.png|}}
  
-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//​**. 
- 
-<note important>​ File f = new File(path); 
- 
-if(f.exists() && !f.isDirectory()) { ... }  
-</​note>​ 
  
poo/laboratoare/10.1607599674.txt.gz · Last modified: 2020/12/10 13:27 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