Differences

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

Link to this comparison view

poo:laboratoare:09 [2025/11/30 16:56]
george.tudor1906
poo:laboratoare:09 [2025/11/30 17:22] (current)
george.tudor1906
Line 1: Line 1:
 ====== Laborator 9 ====== ====== Laborator 9 ======
- +{{:​poo:​laboratoare:​arhiva_laborator_-_swing_1.zip|Arhiva laborator}}
-=== Exerciții interfețe grafice (GUI) ===+
  
 === Problema 1 === === Problema 1 ===
- 
-== 1.1 Enunț == 
  
 Să se realizeze un program care afișează patru câmpuri text și un buton. În primele trei câmpuri text, utilizatorul introduce numele discului suport (A:, C:, D:), calea (secvența de directoare) și numele unui fișier. La apăsarea pe buton se va afișa, în cel de-al patrulea câmp text, calea completă la fișier. Să se realizeze un program care afișează patru câmpuri text și un buton. În primele trei câmpuri text, utilizatorul introduce numele discului suport (A:, C:, D:), calea (secvența de directoare) și numele unui fișier. La apăsarea pe buton se va afișa, în cel de-al patrulea câmp text, calea completă la fișier.
- 
-== 1.2 Variante de implementare == 
  
 În implementare,​ se vor scrie următoarele două variante: În implementare,​ se vor scrie următoarele două variante:
  
-  * **Varianta 1** - 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ă trei obiecte ascultător (**ActionListener**) câte unul pentru fiecare ​**JTextField**, care transferă textul din fiecare câmp text în cel destinat rezultatului. 
-  * **Varianta 2** - 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.+  * 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> <note tip>
Line 21: Line 16:
  
 === Problema 2 === === Problema 2 ===
- 
-== 2.1 Enunț == 
  
 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. 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. 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.
- 
-== 2.2 Exemplu de cod == 
  
 <code java> <code java>
Line 40: Line 31:
  
 <note important>​ <note important>​
-Fișierul de intrare: **intrebare.txt**+Fișier de intrare: **intrebare.txt**
 </​note>​ </​note>​
  
 === Problema 3 === === Problema 3 ===
  
-== 3.1 Enunț ==+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.
  
-Modificați programul implementat la exercițiul anterior, pentru afișarea unor casete cu bifare, **JCheckBox**. +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**.
- +
-Astfel, de această dată vom avea un program care permite utilizarea 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 verde, iar celor incorecte li se va aplica culoarea roșie. 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 verde, iar celor incorecte li se va aplica culoarea roșie.
Line 55: Line 44:
 <note tip> <note tip>
 Presupunem că sunt corecte primul și al treilea răspuns. Presupunem că sunt corecte primul și al treilea răspuns.
 +
 +Metodă utilă: //​getSource()//​
 </​note>​ </​note>​
- 
-== 3.2 Metodă utilă == 
- 
-Metoda //​getSource()//​ poate fi utilizată pentru a identifica sursa evenimentului. 
  
 === Problema 4 === === Problema 4 ===
- 
-== 4.1 Enunț == 
  
 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. 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.
Line 73: Line 58:
   * valoarea inițială afișată (ca numere întregi).   * valoarea inițială afișată (ca numere întregi).
  
-== 4.2 Tratarea evenimentelor == +<note important>​
 La deplasarea cursorului, se generează un eveniment de tip **ChangeEvent** și se apelează metoda //​stateChanged//,​ dintr-un obiect **ChangeListener**. 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//. Valoarea ce corespunde poziției cursorului se poate obține cu metoda //​getValue()//​ din clasa **JSlider**,​ ce are ca rezultat un //int//.
- +</​note>​
-== 4.3 Exemplu de cod ==+
  
 <code java> <code java>
Line 86: Line 69:
  
 === Problema 5 === === Problema 5 ===
- 
-== 5.1 Enunț == 
  
 Program pentru afișarea unui buton cu inscripția "​Colors"​ și modificarea culorii acestuia ca urmare a efectuării unui click pe buton. 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 textului, iar metoda //​setBackground()//​ schimbă culoarea butonului. +Metoda //​setForeground()//​ cu parametru de tip **Color** schimbă culoarea textului, iar 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).
- +
-La fiecare click se va itera pe un vector de culori, inițializat cu constante (//​Color.RED//,​ //​Color.BLUE//​ etc).+
  
 <note tip> <note tip>
Line 100: Line 79:
 Implementați și posibilitatea de acționare a butonului prin combinația de taste **ALT+C**. Implementați și posibilitatea de acționare a butonului prin combinația de taste **ALT+C**.
 </​note>​ </​note>​
- 
-== 5.2 Exemplu de cod == 
  
 <code java> <code java>
Line 108: Line 85:
  
 === Problema 6 === === Problema 6 ===
- 
-== 6.1 Enunț == 
  
 Realizați o fereastră cu titlu, folosind **JFrame**, care să conțină următoarele:​ Realizați o fereastră cu titlu, folosind **JFrame**, care să conțină următoarele:​
Line 116: Line 91:
   * un **JButton**;​   * un **JButton**;​
   * un **JScrollPane** care să conțină un **JTextArea**,​ setat inițial ca fiind invizibil.   * un **JScrollPane** care să conțină un **JTextArea**,​ setat inițial ca fiind invizibil.
- 
-== 6.2 Funcționalitate == 
  
 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**. 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**.
  
 +<note important>​
 Componenta de tip **JScrollPane** va deveni vizibilă la accesarea butonului, dacă există fișierul specificat local pe disc, în caz contrar, se va șterge conținutul din **JTextField**. Componenta de tip **JScrollPane** va deveni vizibilă la accesarea butonului, dacă există fișierul specificat local pe disc, în caz contrar, se va șterge conținutul din **JTextField**.
- +</​note>​
-== 6.3 Exemplu de cod ==+
  
 <code java> <code java>
Line 131: Line 104:
 } }
 </​code>​ </​code>​
- 
-<note important>​ 
-Această problemă combină lucrul cu componente GUI și operații cu fișiere din sistemul local. 
-</​note>​ 
  
poo/laboratoare/09.1764514561.txt.gz · Last modified: 2025/11/30 16:56 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