This shows you the differences between two versions of the page.
|
poo:laboratoare:09 [2025/11/30 16:59] 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}} | ||
| === Problema 1 === | === Problema 1 === | ||
| Line 7: | Line 8: | ||
| În implementare, se vor scrie următoarele două variante: | Î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ă 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. | + | * 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. |
| - | 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 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 === | === 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. | + | 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> | ||
| Line 25: | Line 30: | ||
| </code> | </code> | ||
| - | intrebare.txt | + | <note important> |
| + | Fișier de intrare: **intrebare.txt** | ||
| + | </note> | ||
| === Problema 3 === | === Problema 3 === | ||
| - | 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. | + | 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. |
| - | 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. Presupunem că sunt corecte primul și al treilea răspuns. | + | 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**. |
| - | getSource() | + | 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. |
| + | |||
| + | <note tip> | ||
| + | Presupunem că sunt corecte primul și al treilea răspuns. | ||
| + | |||
| + | Metodă utilă: //getSource()// | ||
| + | </note> | ||
| === Problema 4 === | === 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ă și valoarea inițială afișată (ca numere întregi). | + | 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. |
| - | 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. | + | 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> | ||
| Line 47: | Line 70: | ||
| === Problema 5 === | === Problema 5 === | ||
| - | 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. La fiecare click se va itera pe un vector de culori, inițializat cu constante (Color.RED, Color.BLUE etc). Folosiți o fereastră JFrame cu dimensiuni mici (100, 100) și organizarea FlowLayout. Implementați și posibilitatea de acționare a butonului prin combinația de taste ALT+C. | + | 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. 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 și posibilitatea de acționare a butonului prin combinația de taste **ALT+C**. | ||
| + | </note> | ||
| <code java> | <code java> | ||
| Line 55: | Line 86: | ||
| === Problema 6 === | === Problema 6 === | ||
| - | Realizați o fereastră cu titlu, folosind JFrame, care să conțină următoarele: o etichetă, având ca text Calea, un JTextField, un JButton și un JScrollPane care să conțină un JTextArea, setat inițial ca fiind invizibil. | + | Realizați o fereastră cu titlu, folosind **JFrame**, care să conțină următoarele: |
| + | * o etichetă, având ca text "Calea"; | ||
| + | * un **JTextField**; | ||
| + | * un **JButton**; | ||
| + | * un **JScrollPane** care să conțină un **JTextArea**, setat inițial ca fiind invizibil. | ||
| - | 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**. |
| - | 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 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**. | ||
| + | </note> | ||
| <code java> | <code java> | ||
| File f = new File(path); | File f = new File(path); | ||
| - | if(f.exists() && !f.isDirectory()) { ... } | + | if(f.exists() && !f.isDirectory()) { |
| + | // ... | ||
| + | } | ||
| </code> | </code> | ||