This shows you the differences between two versions of the page.
|
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> | ||