This shows you the differences between two versions of the page.
poo:laboratoare:10 [2020/12/10 13:27] carmen.odubasteanu |
poo:laboratoare:10 [2023/11/27 18:45] (current) carmen.odubasteanu |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Laboratorul 10. ===== | + | ===== Laboratorul 9. ===== |
+ | **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! | ||
=== Problema 1 === | === Problema 1 === | ||
Line 12: | Line 29: | ||
* Se inregistreaza un singur obiect ascultator la JButton, care va compune datele din primele 3 campuri si le va afisa in cel destinat rezultatului. | * 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 important>Trecerea de la un camp text la altul se va putea face si cu tasta Tab. Insa evenimentul de tip Action Event pentru un JTextField se genereaza la apasarea lui Enter! </note> | + | <note important>Trecerea de la un camp text la altul se va putea face si cu tasta Tab. Insa evenimentul de tip ActionEvent pentru un JTextField se genereaza la apasarea lui Enter! </note> |
=== Problema 2 === | === Problema 2 === | ||
Sa se realizeze un program care citeste dintr-un fisier o intrebare urmata | Sa se realizeze un program care citeste dintr-un fisier o intrebare urmata | ||
- | de 4 raspunsuri posibile, unul 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. | + | de 4 raspunsuri posibile, unul 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 raspuns. In cazul in care raspunsul selectat este corect, se va aplica | ||
+ | textului raspunsului culoarea verde, iar, in caz contrar, i se va aplica raspunsului | ||
+ | corect culoarea rosie. | ||
<code java> | <code java> | ||
Line 29: | Line 51: | ||
<note important> intrebare.txt </note> | <note important> intrebare.txt </note> | ||
- | |||
- | |||
- | Butonul de validare este de tip JButton si este accesibil doar dupa ce a | ||
- | fost ales un raspuns. In cazul in care raspunsul selectat este corect, se va aplica | ||
- | textului raspunsului culoarea verde, iar, in caz contrar, i se va aplica raspunsului | ||
- | corect culoarea rosie. | ||
=== Problema 3 === | === Problema 3 === | ||
- | 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//**. | + | 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**. |
- | + | ||
- | <note important> getSource() </note> | + | |
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. | 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. | ||
+ | |||
+ | <note important> getSource() </note> | ||
=== Problema 4 === | === Problema 4 === | ||
- | 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). | + | 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//**. | + | 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**. |
<note important> slider = new JSlider(JSlider.HORIZONTAlL, 0, 255, 0); </note> | <note important> slider = new JSlider(JSlider.HORIZONTAlL, 0, 255, 0); </note> | ||
Line 54: | Line 70: | ||
=== Problema 5 === | === Problema 5 === | ||
- | 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. | + | 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. |
<note important> buton.setMnemonic(KeyEvent.VK_C); </note> | <note important> buton.setMnemonic(KeyEvent.VK_C); </note> | ||
Line 60: | Line 76: | ||
=== Problema 6 === | === Problema 6 === | ||
- | 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. | + | 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. |
- | 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//**. | + | 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**. |
- | 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//**. | + | 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); | <note important> File f = new File(path); |