Differences

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

Link to this comparison view

poo:laboratoare:09 [2017/11/21 22:49]
mihai.nan
poo:laboratoare:09 [2025/11/30 17:22] (current)
george.tudor1906
Line 1: Line 1:
-===== Laboratorul 09. =====+====== ​Laborator 9 ====== 
 +{{:​poo:​laboratoare:​arhiva_laborator_-_swing_1.zip|Arhiva laborator}}
  
 === Problema 1 === === Problema 1 ===
-Pornind de la codul de mai josasigurați faptul că se va apela codul aferent tipului dinamic ​al parametruluidefinind clasele ​**//Hero//**, **//Warrior//**, **//Ninja//**, **//Rogue//** și **//​StormFire//​**, în mod minimal!+ 
 +Să se realizeze un program care afișează patru câmpuri text și un buton. În primele trei câmpuri textutilizatorul introduce numele discului suport (A:, C:, D:), calea (secvența de directoare) șnumele unui fișier. La apăsarea pe buton se va afișa, în cel de-al patrulea câmp textcalea completă la fișier. 
 + 
 +Î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ă 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> 
 +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 === 
 + 
 +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>
-public class Binding{ +@Override 
-    public ​static ​void main(String args[]) { +public void actionPerformed(ActionEvent e) { 
-        Hero h1 = new Warrior(), h2 = new Ninja(); +    ​if ​(e.getSource() instanceof JRadioButton{ 
-        Hero h3 = new Rogue(); +        ​button.setEnabled(true);
-        BadLuck bl = new StormFire();​ +
-        bl.execute(h1)+
-        bl.execute(h2); +
-        ​bl.execute(h3);+
     }     }
 } }
 +</​code>​
  
-abstract class BadLuck { +<note important>​ 
-    ​abstract void execute(Hero h); +Fișier de intrare: **intrebare.txt** 
-    ​abstract void execute(Warrior w); +</​note>​ 
-    ​abstract void execute(Ninja n); + 
-    ​abstract void execute(Rogue r); +=== 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**. 
 + 
 +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 === 
 + 
 +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ă; 
 +  * 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> 
 +slider = new JSlider(JSlider.HORIZONTAL,​ 0, 255, 0);
 </​code>​ </​code>​
  
-<note warning>​Clasele **//​Hero//​** și **//​BadLuck//​** sunt clase abstracte!</​note>​+=== Problema 5 ===
  
-=== Problema 2 === +Program pentru afișarea unui buton cu inscripția "​Colors"​ și modificarea culorii acestuia ca urmare a efectuării unui click pe buton. 
-Pornind de la clasa abstractă **//AMatrix//**, pusă la dispoziție în arhiva laboratoruluiimplementați clasa **//IntegerMatrix//** care moștenește această clasă abstractă și modelează un tablou bidimensional ​cu numere întregi. Clasa **//AMatrix//** moștenește clasa **//ArrayList//**Astfel, matricea propriu-zisă este un obiect de tip **//​ArrayList//​** care conține elemente de tip **//​ArrayList//​**. Clasa va conține metode pentru următoarele operații: afișarea matricei ​și adunarea ​două matrice.+ 
 +Metoda ​//setForeground()// cu parametru de tip **Color** schimbă culoarea textuluiiar 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 posibilitatea de acționare ​butonului prin combinația de taste **ALT+C**. 
 +</​note>​
  
 <code java> <code java>
-//afisare +buton.setMnemonic(KeyEvent.VK_C);
-public String toString(); +
-//adunare +
-public AMatrix addition(AMatrix m);+
 </​code>​ </​code>​
 +
 +=== 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**;​
 +  * 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**.
 +
 +<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>
 +File f = new File(path);
 +if(f.exists() && !f.isDirectory()) {
 +    // ...
 +}
 +</​code>​
 +
poo/laboratoare/09.1511297341.txt.gz · Last modified: 2017/11/21 22:49 by mihai.nan
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