Sunteți pe pagina 1din 15

PROBLEME PROPUSE

Aplicatii consol (cu intrri-iesiri n mod text) 1. S se defineasc o clas "Complex" pentru numere complexe, cu metode pentru operatii aritmetice si cu metode din clasa Object redefinite: equals, toString. Constructori cu si fr argumente. Program pentru calculul valorii unui polinom de variabil complex, cu coeficienti complecsi. 2. S se defineasc o clas SList pentru o list simplu nlntuit de obiecte, fr a mai defini o clas auxiliar pentru un nod de list. Metode pentru adugare si stergere de elemente, plus metoda toString. 3. S se defineasc o clas "Amic" care contine numele si numerele de telefon al unei persoane ("home","office","gsm"). Program pentru crearea, afisarea unui vector de obiecte "Amic" si salvare ntr-un fisier text (cu cte o linie pentru fiecare persoan). Metode impuse: "equals", "toString". Program pentru citire si afisare fisier cu numere de telefon. 4. S se defineasc o clas MTime pentru momente de timp memorate sub forma a trei ntregi: or, minut, secund. Constructor cu 2 si cu 3 argumente ntregi (numrul de secunde se consider implict zero la constructorul cu 2 argumente). Metode: equals, toString, getHours, getMinutes, getSeconds. Metoda toString creeaz un sir de forma HH:MM:SS (HH=ora, MM=minut, SS=secund). 5. S se defineasc o clas Input cu metode pentru citirea de la consol a unor siruri de caractere si numere de diferite tipuri separate ntre ele prin spatii albe. Metode: nextString, nextInt, nextFloat s.a. Program pentru citirea unor numere de la tastatur si afisarea lor pe ecran. Clasa va contine variabile de tip DataInputStream, StringTokenizer si String. Conversia de la sir la numr binar se face cu metode ca Integer.parseInt, Float.parseFloat s.a. 6. S se defineasc o clas FileTokenizer cu aceleasi metode ca si clasa StringTokenizer dar cu efect diferit. Metoda nextToken are ca rezultat urmtorul cuvnt din fisier, iar metoda hasMoreTokens are rezultat false la sfrsit de fisier. Clasa va contine variabile de tip RandomAccessFile si StringTokenizer. Constructor cu argument numele fisierului analizat (de tip String). 7. S se defineasc o clas pentru un arbore binar de cutare cu metode pentru adugare sir la arbore (add), pentru cutarea unui sir dat n arbore cu rezultat boolean (contains) si pentru transformarea sirurilor din nodurile arborelui ntr-un singur sir (toString), prin parcurgere prefixat (rdcin, stnga, dreapta). Program pentru crearea si afisarea unui arbore ordonat de siruri. Se poate defini o clas auxiliar pentru un nod de arbore binar, cu 3 variabile si un constructor.

8. S se defineasc o clas "Matrix" pentru operatii uzuale cu matrice de numere reale: adunare, nmultire, "toString". Program pentru ridicarea la o putere ntreag a unei matrice ptratice. 9. S se defineasc o clas "Graph" pentru grafuri orientate cu noduri numerotate de la 1. Date (de tip "private"): numr de noduri si matrice de adiacente ( matrice ptratica cu componente de tip "boolean"). Metode: "size" ( numrul de noduri din graf), "addArc" (adaug un arc la graf), "isArc" (verific dac exist arc ntre dou noduri date), "toString" (lista de arce din graf). Program pentru creare graf prin adugari succesive de arce (pe baza unor perechi de numere citite de la consol), afisare arce si afisare grad interior si exterior ptr fiecare nod (nr. de arce n si din nod) 10. S se defineasc o clas Timer pentru msurarea unor intervale de timp. Clasa contine dou variabile de tip long pentru momentul de nceput si de sfrsit al intervalului msurat, exprimate n milisecunde. Intervalul msurat ncepe la construirea obiectului sau la apelul metodei start; metoda stop retine momentul final. Metoda getMillis are ca rezultat (long) intervalul scurs ntre momentul initial si momentul final. Pentru a citi timpul curent din sistem (n milisecunde) avem dou posibilitti: System.currentTimeMillies() new Date().getTime() 11. S se defineasc o clas pentru o list simplu nlntuit ordonat, ca subclas a clasei SList, cu redefinirea metodei de adugare a unui obiect la list. 12. S se defineasc o clas pentru o stiv nlntuit , ca subclas a clasei SList, cu metode "push", "pop", "isEmpty" si redefinirea metodelor interzise pentru o stiv. 13. S se defineasc o clas "SortedVector" derivat din clasa Vector pentru un vector ordonat de obiecte comparabile. Se vor redefini metodele: int indexOf(Object) // indice obiect cautat in vector void addElement (Object) // adauga un nou obiect la vector Se poate folosi metoda "insertElementAt (Object,int)" din clasa Vector si metoda "binarySearch (Vector,Object)" din clasa Collections. 14. S se defineasc o clas "IOFile" derivat din RandomAccessFile, care s contin n plus dou metode : "eof" cu rezultat "true" dac s-a ajuns la sfrsit de fisier si "writeLine" cu parametru de tip String, pentru scrierea unei linii n fisier (cu adugare terminator de linie). Se va folosi metoda "writeBytes(String)". S se utilizeze clasa IOFile ntr-un program de copiere fisiere text. 15. S se defineasc o clas FileVector, derivat din clasa Vector, n care constructorul are ca argument (String) un nume de fisier text si populeaz vectorul construit cu date din fisier astfel: fiecare element din vector este un obiect Vector care contine cuvintele dintr-o linie a fisierului text. S se verifice prin afisarea cu metoda toString a obiectului FileVector creat.

16. S se scrie o functie static, cu argument de tip Enumeration si rezultat de tip double, pentru calculul sumei elementelor unei colectii de obiecte numerice (de tip Double). S se verifice pentru un vector (obiect Vector) si apoi pentru un tabel de dispersie (obiect de tip Hashtable) n care s-au introdus obiecte de tip Double. 17. S se defineasc o clas "FileComp" pentru comparare de fisiere dup criteriul indicat printr-o liter la construirea obiectului comparator: (N=nume, T= tip, S= dimensiune fisier, D= data ultimei modificri). FileComp(String order); //order poate fi "N","T","S","D" S se defineasc o clas "FileEnum", compatibil interfata cu Enumeration, pentru enumerarea fisierelor dintr-un director dat, ordonate dup criteriul indicat la construirea obiectului enumerator si filtrate conform unui obiect filtru primit (eventual) de comparator. Ordonarea se va face n doua feluri: - folosind metoda "Arrays.sort" - prin crearea unei multimi ordonate TreeSet. Constructori:
FileEnum (File path, String order,FileFilter filter) // cu ordonare, fara filtru FileEnum (File path, String order) // cu ordonare, fara filtru FileEnum (File path, FileFilter filter) // fara ordonare, cu filtru FileEnum (File path) // implicit ordonare dupa data, fara filtru FileEnum (String order) // implicit directorul curent FileEnum () // implicit directorul curent

18. S se defineasc o clas "Scanner" pentru un analizor lexical de siruri. Constructor cu argument sirul analizat (String). Metoda suplimentara "int getType()" are ca rezultat tipul ultimului simbol extras din fisier (1 = nume simbolic, 2 = numar, 3 = operator (caracter special). Intre atomii lexicali pot exista sau nu spatii albe. Variante: a) derivat din clasa StringTokenizer, b) fr a folosi clasa StringTokenizer. 19. S se defineasc o clas Evaluator pentru un interpretor de instructiuni de atribuire simple care foloseste un dictionar Hashtable pentru tabela de simboluri (nume si valori variabile). Metoda eval(String) interpreteaz o instructiune si actualizeaza tabela de simboluri (dictionarul). Clasa Evaluator are un constructor cu numele unui fisier text si foloseste un obiect Scanner. Metoda toString produce un sir cu numele si valorile variabilelor, folosit la afisarea rezultatelor evalurii. Instructiunile pot avea forma v=op +- op +- op ... unde: op ={v,c} v este un nume de variabil, c este o constant ntreag fr semn. Fiecare instructiune se afla pe o linie separata. 20. S se defineasc o clas "HSet" pentru o multime realizat ca tabel de dispersie, cu metodele: add, contains, toString, size. Clasa "HSet" va fi derivat din clasa Hashtable, n care cheia si valoarea asociat vor fi egale (cheile sunt elementele multimii). Program pentru adugarea unor siruri la multime si afisarea multimii. S se foloseasc si metoda "elements" pentru afisarea elementelor multimii.

21. S se defineasc o clas "ArraySet" pentru o multime de obiecte realizat ca vector neordonat cu elemente distincte, n dou variante: clasa "ArraySet" derivat din clasa Vector si clasa ArraySet contine un obiect de tip Vector. Metode din clasa Vector si din ArraySet: boolean add(Object), boolean remove(Object), boolean contains(Object), String toString(). Rezultatul metodelor "add" si "remove" este "true" dac operatia cerut a reusit (dac s-a modificat multimea pentru care se execut). Program pentru crearea unei multimi de siruri prin adugari succesive, eliminarea unor elemente si afisare dup fiecare operatie. 22. S se defineasc o clas LHSet pentru o multime de obiecte realizat ca tabel de dispersie cu mentinerea ordinii de introducere n multime. Tabelul de dispersie este un vector de liste de coliziuni. Clasa LHSet contine un vector intrinsec de obiecte de tip "Node", unde "Node" este o clas cu o variabil de tip Object si dou variabile de tip Node: legatur la urmtorul nod din lista de coliziuni si legtur la urmtorul element din lista care mentine ordinea de adugare la multime. Clasa LHSet extinde clasa AbstractSet si defineste metodele "add", "size", "contains" si "iterator". Iteratorul asociat clasei LHSet foloseste lista tuturor elementelor din multime (face o enumerare n ordinea de adugare la multime). Metoda "remove" nu va fi implementat (arunc exceptia UnsupportedOperationException). 23. S se defineasc o clas "SortedVector" pentru un vector ordonat dup orice criteriu, specificat de utilizator la construirea unui obiect "SortedVector". Clasa va contine o variabil de tip Comparator, initializat de un constructor cu argument de tip Comparator si folosit de metoda "binarySearch". Program pentru afisarea cuvintelor distincte dintr-un text n ordine descresctoare. 24. S se defineasc o clas filtru dup lungimea fisierelor si s se foloseasc pentru afisarea numelor fisierelor cu lungime mai mare dect o valoare dat n linia de comand. Clasa filtru va implementa interfata FilenameFilter si va fi folosit de metoda list din clasa File. 25. S se defineasc o clas filtru pentru selectie fisiere dup o list de extensii (tipuri de fisiere). Clasa implementeaz una din interfatele FileFilter sau FilenameFilter si contine un vector cu tipurile de fisiere acceptate. Program pentru afisarea fisierelor legate de Java ("java", "class", "jar"). 26. S se defineasc o clas filtru pentru selectie fisiere dup o masc ce poate contine caractere '*' si '?'. Variante: clasa implementeaz interfata FileFilter sau interfata FilenameFilter. Program pentru verificarea clasei. 27. S se scrie o metod static select pentru filtrarea unei colectii. Functia are un argument de tip Collection si un argument de tipul FileFilter sau FilenameFilter si rezultat de tip List. Se va defini o clas filtru dup un subsir continut de sirurile obtinute din obiectele colectiei. Program pentru crearea unei multimi de siruri pe baza cuvintelor dintr-un fisier, extragerea si afisarea cuvintelor care contin un subsir dat.

28. S se defineasc o clas abstract CollectionFilter pentru filtrarea oricrei colectii de obiecte, cu urmtoarele metode publice: abstract boolean accept (Object obj); // daca obj este acceptabil sau nu List select (Collection c); // retin in lista obiectele acceptabile S se defineasc o clas derivat din clasa precedent, pentru selectarea obiectelor care, transformate n siruri (cu metoda toString), contin un sir dat (n constructorul clasei). S se verifice clasa prin afisarea listei produse de metoda select. 29. S se defineasc o clas "ArraySet" pentru o multime de obiecte realizat ca vector (ArrayList) care pstreaz ordinea de introducere n vector si care s poat nlocui o clas TreeSet sau HashSet (s implementeze interfata Set). Variante: a) clasa extinde pe ArrayList si implementeaz interfata Set; b) clasa extinde pe AbstractSet si contine un obiect ArrayList 30. S se defineasc o clas "SortedArraySet" pentru o multime ordonat de obiecte, cu posibilitate de ordonare dup metoda "compareTo" sau dup metoda "compare". S se foloseasc n programul pentru afisarea cuvintelor distincte dintr-un text n ordine cresctoare si descresctoare. Variant: clasa implementeaz interfata SortedSet. 31. S se defineasc o clas pentru o stiv list nlntuit folosind clasa existent LinkedList. Se vor defini aceleasi metode ca cele din clasa Stack. 32. S se defineasc o clas HSet pentru o multime de obiecte realizat ca tabel de dispersie, n care vectorul principal s contin referinte la obiecte LinkedList (sinonimele se memoreaz n liste nlntuite). S se verifice metodele clasei. Clasa va fi o variant simplificat a clasei HashSet (dar nu se va folosi HashSet). 33. S se defineasc o clas "ArrayMap" pentru un dictionar realizat din doi vectori : un vector de chei si un vector de valori asociate si care s implementeze interfata Map. Se vor defini metodele: toString, put, get, keySet, values. S se foloseasc n programul de afisare a numrului de aparitii al cuvintelor ntr-un text. 34. S se defineasc o clas "ArrayMap" pentru un dictionar realizat din doi vectori: un vector de chei si un vector de valori asociate, care s extind clasa AbstractMap. Metoda entrySet nu va folosi o clas multime existent (HashSet sau TreeSet) ci va folosi o clas ce extinde pe AbstractSet cu un iterator care parcurge cei doi vectori din clasa ArrayMap (asigur o imagine de multime de perechi asupra celor doi vectori). 35. S se defineasc o clas "LinkedSet" pentru o multime realizat ca list nlntuit de elemente distincte. Clasa va implementa interfata Set. Se vor examina variantele: - "LinkSet" este derivat din clasa LinkedList - "LinkSet" este derivat din clasa AbstractSet si contine un obiect LinkedList.

Program pentru crearea unei liste de obiecte Integer si afisarea ei. Folosind un obiect iterator sa se afiseze codul "hash" pentru toate elementele multimii (rezultatul functiei "hashCode"). 36. S se defineasc o clas LinkedMap, derivat din clasa AbstractMap, care contine un obiect de tip LinkedSet. Se vor defini metodele put si entrySet. Se va defini si folosi o clas MEntry care implementeaz interfata Map.Entry, pentru o pereche de obiecte cheie-valoare. Program pentru crearea si afisarea unui dictionar cu valorile variabilelor ntlnite n instrucutiuni de atribuire simple, de forma v=c sau v=v , unde c este un numr ntreg (o constant), iar v este un nume de variabil. Exemplu: x=3 / y=x / z =7 / x= z / Rezultat: [x:7, y:3, z:7] 37. Program pentru afisarea unei liste de referinte ncrucisate cu fiecare cuvnt distinct dintr-un fisier text mpreun cu numerele liniilor de text n care apare acel cuvnt. Se va folosi un obiect TreeMap n care se vor introduce ca valori asociate cuvintelor liste de numere (obiecte de tip LinkedList sau "LinkedSet" cu elemente de tip Integer). Pentru afisare se vor redefini metodele "toString" si "keySet". Fiecare cuvnt va ncepe pe o linie nou si va fi urmat de lista liniilor n care apare. 38. S se defineasc o clas "MultiMap" pentru un dictionar cu valori multiple (o cheie are asociat o multime de valori), ca o clas derivat din AbstractMap si care contine o variabil de tip AbstractMap. Metode impuse: Object put (Object key, Object value) : pune pereche cheie-valoare n dictionar Object get (Object key) : scoate multimea de valori asociate unei chei. Constructorul clasei "MultiMap" are un parametru de tip Map, iar n program se va folosi un parametru efectiv de tip "ArrayMap" sau TreeMap sau Hashmap. Program pentru crearea unui tabel de referinte ncrucisate folosind un obiect "MultiMap" n care cheia este un cuvnt, iar multimea de valori asociate este lista numerelor de linii n care se afl cuvntul respectiv. 39. S se defineasc o clas SortedLinkedSet pentru multimi de obiecte realizate ca liste nlntuite ordonate si care contine o variabil de tip Comparator. Unul din constructori are argument de tip Comparator, pentru initializarea variabilei din clas. Se vor examina dou variante: (a) Clasa extinde pe AbstractSet, implementeaz SortedSet si contine o variabil LinkedList; (b) Clasa extinde pe LinkedList si implementeaz pe SortedSet. 40. S se defineasc o clas "LinkedQueue" derivat din AbstractCollection si care contine dou variabile de tip "Node" pentru adresa primului si a ultimului element din coad. Clasa "Node" este o clas inclus si corespunde unui nod de list simplu nlntuit. Program pentru introducerea si extragerea de siruri ntr-o coad, cu afisare continut coad dup fiecare operatie. 41. S se defineasc o clas pentru un nod de arbore binar, ca o clas interioar clasei pentru arbori binari. Clasa arbore contine cteva metode strict necesare : add,

toString. Ca alternativ la metoda toString se pot defini metode pentru vizitare n lrgime si n adncime (prefixat, infixat si postfixat), cu rezultat String. 42. S se defineasc clase iterator incluse pentru arborele binar din problema anterioar, pentru cele 4 moduri de vizitare a nodurilor. Clasa arbore va contine si 4 metode cu rezultat Iterator care instantiaz aceste clase. 43. S se defineasc o clas "Table" pentru o matrice de obiecte, cu metodele: "toString" si "sort(col)". Metoda "sort" ordoneaz matricea dup valorile dintr-o coloan dat "col" si apeleaz metoda "Arrays.sort" cu un al doilea parametru de tip Comparator. Clasa comparator de linii se va defini mai nti ca o clas cu nume inclus n clasa "Table" si apoi ca o clas anonim inclus n metoda "sort". O matrice este un vector de vectori(de linii), iar metoda "compare" compar dou linii dup valorile dintr-o coloan dat. Se presupune c obiectele din matrice sunt dintr-o clas compatibil cu Comparable si deci suport metoda "compareTo". Program pentru reordonarea unui obiect "Table" dup toate coloanele posibile cu afisare dup fiecare ordonare. Obiectul "Table" poate fi creat pe baza urmatoarei matrice de siruri: String a[][]= {{"5","2","3"},{"4","1","6"},{"1","7","0"},{"1","1","1"}}; 44. Un fisier text contine linii formate din mai multe cuvinte separate prin spatii albe. S se defineasc o clas "LineList" pentru o list de linii creat pe baza unui fisier (constructor cu numele fisierului). Clasa contine o metoda "sort" de ordonare a listei de linii dup un cuvnt dat din linie (prin numrul su n cadrul liniei, ncepnd cu 1). Programul pentru verificarea clasei primeste n linia de comand numele fisierului si numrul cuvntului dup care se ordoneaz. Liniile ordonate se afiseaz pe ecran. Pentru ordonare se apeleaza functia "Arrays.sort" cu parametru de tip Comparator. Clasa comparator este definit ca o clas inclus n clasa "LineList" si apoi ca o clas inclus n blocul metodei "sort" (anonim). Se consider c fisierul poate fi citit integral n memoria intern. 45. S se defineasc o clas "ReaderWriter" pentru fisiere cu operatii pe caractere si care suport att operatii de citire ct si operatii de scriere. Clasa preia metode de la clasele FileWriter (prin mostenire) si de la FileReader (prin delegare). Metode din clasa "ReaderWriter": read, write, close, reset (repozitionare pe nceput de fisier). Program pentru crearea unui fisier urmat de citirea lui, folosind clasa ReaderWriter. 46. Program pentru crearea unui fisier comprimat (format gzip) dintr-un fisier text si decomprimarea pentru afisarea fisierului, folosind obiecte GZIPOutputStream si GZIPInputStream construite pe baza unor obiecte FileOutputStream si respectiv FileInputStream. Se vor folosi metode de citire/scriere octet read si write. 47. S se defineasc o clas pentru citire cu conversie dintr-un fisier text (dintr-un flux) paralel cu clasa PrintStream. Metode: readString, readInt, readFloat. Se ignor spatiile albe dintre siruri la citire. Clasa poate extinde fie clasa Reader, fie clasa FilterInputStream si foloseste o variabil StringTokenizer. Clasa are un

constructor fr argumente, pentru citire de la consol, si un constructor cu argument String, pentru citire dintr-un fisier. Se poate utiliza si clasa StreamTokenizer. 48. S se defineasc o clas TNode pentru un nod de arbore multici, care implementeaz interfata TreeNode din pachetul javax.swing.tree, plus metodele: insert, remove, add, setParent (din MutableTreeNode) getUserObject, toString Clasa contine o variabil de tip Object (pentru datele memorate n nod), o variabil de tip Vector pentru referinte la succesori (la nodurile fii) si o variabil TreeNode pentru nodul printe. S se foloseasc clasa TNode pentru crearea si afisarea unui arbore cu marcajele dintr-un fisier XML. 49. S se defineasc o clas adaptor de la interfata Iterator la interfata Enumeration. S se defineasc o clas TNode care implementeaz interfata TreeNode plus metodele urmtoare : insert, remove, add, setParent (din MutableTreeNode) getUserObject, toString Clasa TNode contine o list nlntuit LinkedList de noduri fii. S se foloseasc clasa TNode pentru crearea si afisarea (prefixat, cu indentare) a unui arbore cu numele fisierelor dintr-un director dat si din toate subdirectoarele sale (recursiv). Aplicatii cu interfat grafic (cu clase JFC) 1. S se defineasc o clas "MFrame" derivat din JFrame cu 4 constructori - un constructor fr argumente - un constructor cu parametru "String" care reprezint titlul ferestrei - un constructor cu doi parametri "int" ce reprezint dimensiunile ferestrei. - un constructor cu patru parametri "int": dimensiuni si pozitie fereastr. Pentru stabilirea coordonatelor coltului din stnga sus se poate folosi metoda: setLocation (int x, int y); S se includ si metoda "setVisible" n constructorii clasei "MFrame". In functia "main" se vor crea dou ferestre dispuse una sub alta (afisate automat). 2. Program pentru afisarea unei etichete JLabel si a unui cmp text JTextField nemodificabil (setEditable(false)), pentru afisarea numelui si valorii unei proprietti (de ex. numele "Color" n eticheta si valoarea "White" n cmpul text. Se va folosi asezarea FlowLayout. Se vor aduga apoi: - bordura la cmpul text ( setBorder(new EtchedBorder()) - culoare alb la cmpul text (setBackground (Color.white)) - dimensiune dorit la cmpul text (setPreferredSize(180,20)) S se extind programul pentru afisarea tabelei de proprietti sistem Java. Exemplu de afisare a tabelei de proprietti n mod text:
Properties prop = System.getProperties(); Enumeration e = prop.propertyNames(); while (e.hasMoreElements()) {

String pname = (String) (e.nextElement()); System.out.println ( pname+":"+ prop.getProperty(pname)) ; }

3. Program pentru afisarea unui mic formular de introducere a datelor (fr tratarea evenimentelor). Formularul va contine 3 rubrici, fiecare rubric este un cmp text precedat n stnga de o etichet. Ce mod de asezare si cte panouri trebuie folosite pentru a mentine etichetele n partea stng a ferestrei si cmpurile text n partea dreapt, indiferent de dimensiunile ferestrei principale, ale etichetelor si cmpurilor ? 4. Program pentru afisarea unei ferestre asemntoare celei afisate de comanda Run din sistemul Windows: un cmp text cu o etichet (Open) n stnga lui si 3 butoane: OK,Cancel, Browse. Se va nlocui apoi cmpul text cu un obiect de tip JComboBox (pentru selectia unui text dintr-o list). 5. Program pentru afisarea unui nume de director (primit n linia de comand) ntrun cmp text si a numelor fisierelor din acest director ntr-o list JList. S se foloseasc apoi o zon text JTextArea n locul listei JList. Se pot aduga etichete cmpului text si zonei text (Directory si Files). 6. S se defineasc o clas care implementeaz interfata MouseListener prin redefinirea metodei "mousePressed" cu efectul de producere semnal sonor. Se va folosi metoda Toolkit.getDefaultToolkit().beep(); S se scrie un program care reactioneaz sonor la orice clic pe mouse pe suprafata ferestrei principale ( de tip Frame sau JFrame). S se genereze semnal sonor si n metodele "mouseEntered", "mouseExited" si s se observe efectul la deplasare mouse n interiorul si in afara ferestrei. S se mute semnalul sonor din "mousePressed" n "mouseClicked" si s se observe efectul (si atunci cand dureaza mult intre apasare si eliberare buton). S se rescrie programul anterior prin modificarea clasei receptor astfel ca ea s extind clasa abstract MouseAdapter n loc s implementeze interfata MouseListener. 7. S se defineasc o clas care implementeaz interfata KeyListener cu metoda "keyPressed" definit pentru afisare ntr-un cmp text a codului tastei apasate (obtinut cu metoda "keyCode" din clasa KeyEvent). S se scrie un program cu dou cmpuri text (JTextField): unul pentru introducere si unul pentru afisare coduri taste apsate. Examinati toate posibilitatile de definire a clasei asculttor. Metoda "keyPressed" este apelat la apsarea oricrei taste (inclusiv Shift, Ctrl, Alt). Metoda "keyTyped" este apelat numai la actionarea unei taste ce corespunde unui caracter Unicode (Ascii). Modificati programul pentru afisare n cmpul text a mesajului "KeyTyped" sau "KeyPressed". 8. S se modifice programul anterior prin redefinirea clasei asculttor ca o clas ce extinde clasa KeyAdapter (n loc s implementeze KeyListener). Examinati toate posibilittile de definire a clasei asculttor.

9. Program pentru afisarea unui buton cu inscriptia "Click Me" si afisarea unei casete de dialog cu titlul "Event Fired" la fiecare clic pe buton (cu mouse). Afisarea casetei de dialog se face astfel: JOptionPane.showMessageDialog(new JFrame(),"","Event Fired !", JOptionPane.PLAIN_MESSAGE); Se vor examina pe rnd urmtoarele variante de definire a clasei ascultator la evenimente generate de buton: a) Cu trei clase separate: clasa asculttor, clasa derivat din JFrame care contine si un buton, clasa cu "main" (care afiseaz fereastra). b) Cu dou clase: clasa asculttor si clasa derivat din JFrame si care contine metoda "main". c) Cu o singur clas: clasa asculttor cu nume inclus n clasa ce contine metoda "main" (clasa inclus este si static) d) Cu o singura clas : clasa asculttor anonim, inclus ntr-un bloc (metoda "addActionListener") din clasa ce contine metoda "main". e) Cu dou clase: O subclas a clasei JButton care contine si metoda "actionPerformed" si clasa care contine metoda "main". f) Cu dou clase : clasa asculttor inclus ntr-o subclas a clasei JFrame (separat de clasa ce contine metoda "main") g) O singur clas care extinde pe JFrame si implementeaz ActionListener (clasa este si generator si asculttor la evenimente). 10. Program pentru afisarea a doua cmpuri text (nemodificabile) si a trei butoane radio (JRadioButton) notate cu A,B,C si grupate ntr-un grup de butoane ("ButtonGroup"). In primul cmp se afiseaz o ntrebare ("Ce alegeti"). Dup apsarea unui buton se afiseaza n al doilea cmp numele selectat (A,B,C). Toate cele 3 butoane radio au un singur obiect ascultator de tip ActionListener care modific continutul cmpului rezultat (cu rspunsul la ntrebare). Programul corespunde unei ntrebri cu un singur rspuns posibil dintr-un test gril. 11. Modificati programul anterior pentru afisarea unor casete cu bifare JCheckBox si afisarea numelor casetelor selectate n cmpul text. Programul corespunde unei ntrebri cu mai multe rspunsuri posibile dintr-un test gril. Cum se poate interzice bifarea repetat a unor casete ? Toate cele 3 casete au un singur ascultator de tip ItemListener, cu o metod "itemStateChanged" si cu argument de tip ItemEvent. Metoda "getSource" apelat pentru un obiect eveniment are ca rezultat numele casetei care a generat evenimentul (care difer de textul afisat lng caset si transmis la construirea obiectului JCheckBox. 12. S se defineasc o clas "LinkListModel" pentru un model de list care foloseste o list nlntuit n loc de vector. Variante: Clasa extinde AbstractlistModel si contine o variabil LinkedList sau clasa extinde LinkedList si este compatibil cu interfata ListModel.

13. Program care simuleaz un calculator cu operatii de adunare si scdere. Fereastra aplicatiei contine dou cmpuri text: unul pentru numrul introdus si altul pentru rezultatul operatiilor anterioare (ambele de lungime 20). Fereastra mai contine trei butoane: pentru adunare(+), pentru scadere(-) si pentru stergere cmpuri ("Clear"). Dimensiunile ferestrei sunt (240,140). Numerele se introduc prin taste si sunt aliniate la dreapta n cmpurile text ( tf.setHorizontalAlignment (tf.RIGHT) ). Dup orice operatie (+,-,Clear) controlul revine cmpului de introducere (prin "requestFocus"). Cum se pot evita introducerile gresite (caractere interzise n numere) ? 14. S se modifice programul anterior pentru un calculator cu numere introduse numai prin butoane (cu cifre de la 0 la 9). Nu se pot introduce direct de la tastatur caractere n campurile text ( setEditable(false) ).Se vor folosi trei panouri: un panou cu cele dou cmpuri text, un panou cu cele 10 butoane pentru cifre si un panou cu cele trei butoane pentru operatii. Dispunerea n fiecare panou poate fi "GridLayout". Dimensiunea sugerat pentru fereastra aplicatiei (300,160). Cele 10 butoane vor fi create si adugate ntr-un ciclu; toate vor avea un singur obiect asculttor care determin sursa evenimentului si deci cifra introdus: String cifra= ((JButton) (ev.getSource()) ).getActionCommand() 15. Program pentru afisarea unui formular folosit la nregistrarea unor clienti. Formularul contine trei componente JTextField n care se introduc numele, anul nasterii si adresa de e-mail si un buton de salvare a datelor intr-un fisier ("Save"). Programul nu permite memorarea n fisier dect dac s-au introdus toate datele, prin producerea de evenimente "ActionEvent" la fiecare cmp. S se adauge apoi un buton de anulare a datelor introduse pn la un moment dat ("Cancel"), cu stergere cmpuri text. Dup salvare, se sterge tot ce s-a introdus anterior. Cmpurile text sunt precedate de cte un text explicativ (realizat ca etichet JLabel). Etichetele sunt plasate ntr-un panou (cu asezare GridLayout(0,1)), iar cmpurile text ntr-un alt panou (cu aceeasi asezare). Panoul cu etichete se plaseaz n stnga panoului cu cmpuri text ("Center", "East" ntr-o asezare "Borderlayout" n panoul principal). In caz de eroare (date incomplete la salvare ) se va afisa o caset de dialog si se emite un semnal sonor. Sa se adauge validarea datelor introduse cu semnalarea erorilor posibile. Variante: a) Cmpurile pot fi completate n orice ordine b) Cmpurile trebuie completate n ordinea nume, an, email. 16. Program cu interfat grafic pentru vizualizarea evolutiei unei stive dup operatii push si pop. Componente obligatorii: - JList ptr continutul stivei - JTextField ptr introducere cuvinte (cu actionare tastei Enter dup fiecare cuvant) si pentru afisare cuvinte scoase din stiva - JButton pentru operatia "push" - JButton pentru operatia "pop" 17. Program care permite introducerea unui nume de director ntr-un cmp text si afiseaza lista fisierelor din director ntr-o list de selectie JList. Lista de selectie este

reinitializat la fiecare modificare a cmpului text (nu se prelungeste cu alte nume de fisiere). Se va aduga programului anterior nc un cmp text n care se va afisa numele fisierului selectat de utilizator (prin clic pe mouse) din lista de selectie (cu toate fisierele din director). Fiecare cmp text este nsotit de o etichet ("Directory", "Selected"). Cele dou cmpuri si cele dou etichete se plaseaz ntr-un panou separat (cu asezare "GridLyout"). Asezarea n fereastra principal este "FlowLayout". 18. Se va modifica programul anterior prin inlocuirea campului text pentru fisierul selectat cu o alta lista JList, la care se adaug fisierele selectate din prima list. Pentru a evita afisarea repetat a fisierelor selectate (la apsare si ridicare buton mouse) se va introduce n metoda valueChanged" secventa :
if ( e.getValueIsAdjusting()) return; // ListSelectionEvent e

19. Program pentru afisarea numelor fisierelor dintr-un director ntr-o list JList , cu un buton de stergere a fisierelor selectate din list, astfel ca n lista afisat s rmn numai fisierele dorite. Se va actualiza si un cmp text cu numrul fisierelor rmase (cele afisate n list). Fisierele selectate nu vor fi sterse efectiv de pe disc, ci numai din lista afisat. 20. Program pentru "navigare" prin sistemul de fisiere: la selectarea unui subdirector din lista afisat se mut numele acestuia n cmpul text (cu nume director curent) si se afiseaza n JList continutul su. Pentru revenire la directorul printe se afiseaz n JList si numele acestuia sub forma "..". 21. Program care citeste cuvinte dintr-un fisier text, le adaug la un dictionar ordonat de cuvinte si numr de aparitii si afiseaz dictionarul n dou liste JList: o list de cuvinte si o list cu numere de aparitii. Pentru a urmri evolutia listelor, citirea unui nou cuvnt din fisier se face numai la actionarea unui buton (sau a unei taste). Cuvntul citit din fisier este afisat si ntr-un cmp text JTextField. 22. Program cu interfat grafic pentru afisarea metodelor unei clase ntr-o list JList. Numele clasei se introduce ntr-un cmp text. S se adauge un buton pentru afisarea metodelor mostenite de la superclasa sa direct. 23. S se defineasc: - o clas Finder pentru cutarea ntr-un director dat a fisierele care contin un sir dat si crearea unui dictionar cu chei nume de fisiere si cu valori numrul de linii din fisier care contin sirul.Constructor cu argument numele directorului. Metoda find creeaz un dictionar si primeste un nume de director: Map find (String) - o clas MapJList pentru afisarea unui dictionar intr-un obiect JList. Clasa extinde pe JList. Constructori cu argument Map si fara argument. Metoda setMap(Map) transmite un dictionar la obiectul JList ptr afisare. - o clasa GUIFind cu interfata grafica pentru gasirea fisierelor dintr-un director dat care contin un sir dat si afisarea lor in. Se va folosi un obiect Finder. La selectarea unui fisier se afiseaz ntr-o zon text JTextArea continutul fisierului selectat.

Componente: JList cu numele fisierelor gasite si prima linie care contine sirul; JTextField cu numele directorului; JTextField pentru introducerea sirului cutat; JTextArea pentru afisare continut fisier selectat din list ; JButton "Find" pentru cutare fisiere si afisare pe ecran. 24. S se defineasc o clas TNode pentru un nod de arbore binar cu date de tip Object. S se defineasc o clasa Tree pentru un arbore binar de cautare cu 2 constructori: fara arg si cu argum de tip Comparator. Metode: contains, add, size, toString (sir ptr subarborele cu radacina in acest nod, prefixat si cu indentare ), Vector toArray(), // obtinut din sirul produs de "toString" (un elem= o linie) String toSave() // sir cu valorile din noduri in ordine infixata (SRD) String getPath (Objectx ) // calea de la radacina la nodul cu valoarea x Sa se defineasca o clasa TreeView pentru vizualizarea unui arbore Tree folosind un obiect JList si un camp text pentru adaugarea de noi siruri la arborele existent. In alt camp text se afiseaza calea de la radacina la nodul selectat. La selectia unui nod din arbore se afiseaza intr-un al doilea camp text calea de la radacina la nodul selectat. Butonul "Save" are ca efect salvarea sirurilor din arbore intr-un fisier text cu numele "Tree.txt", ordonate alfabetic si separate prin spatii albe. 25. S se defineasc o clas TreeList pentru afisarea de arbori ntr-un obiect JList, cu posibilitatea de expandare/contractie noduri interne prin selectia nodului (clic pe mouse). Afisarea se face cu indentare diferit la fiecare nivel din arbore, asemntor cu cea din JTree. Clasa TreeList este derivata din JList si implementeaz interfata ListSelectionListener. La selectarea unui nod din lista afisat se modifica starea sa (expandat/neexpandat). S se utilizeze un obiect din clasa TreeList pentru afisarea arborelui de fisiere dintr-un director cu nume introdus ntr-un cmp text (initial nodurile interne nu sunt expandate). 26. S se defineasc o clas "Folder" cu o functie "types" pentru extragerea tipurilor de fisiere dintr-un director dat (ca argument in constructor) ntr-un obiect MMap cu fiecare tip (extensie) mpreun cu lista numelor fisierelor de acel tip ( tipul poate apare cu litere mari sau mici). Fisierele fr tip apar ntr-o list separat cu cheia "NULL" (dac exist fisiere care nu contin un punct n numele lor). S se scrie un program cu interfat grafic pentru afisarea tipurilor (extensiilor) de fisiere din obiectul MMap creat ntr-un JList si afisarea ntr-o a doua list JList a numelor fisierelor de tipul selectat de operator. Butonul "Save" salveaz numele complet al fisierelor de un anumit tip ntr-un fisier cu numele tipului si extensia "dir" (din lista a doua). 27. S se defineasc o clas MapList, derivat din JList, pentru afisarea continutului unui dictionar ntr-un obiect JList . Constructor cu argument de tip Map. Metode: "setMap (Map)", String toString. Program pentru crearea si afisarea unui dictionar cu numrul de fisiere din fiecare tip dintr-un director dat folosind un obiect MapList. Numele directorului se introduce ntr-un cmp text. Initial se foloseste

continutul directorului curent. Un buton Save permite salvarea datelor afisate ntrun fisier text cu numele directorului si extensia dir. 28. S se defineasc o clas MapTable, derivat din JTable si care implementeaz interfata ListSelectionListener, folosit pentru afisarea continutului unui dictionar ntr-un tabel cu dou coloane, cu ordonarea dictionarului dup coloana selectat. Constructor cu argument de tip Map. Metode: "setMap (Map)" , care creeaza model de tabel si l transmite la tabel; "sort (int c)" pentru sortare tabel dup o coloan dat c (folosind metoda Arrays.sort sau Collections.sort). Program pentru crearea si afisarea unui dictionar cu numrul de fisiere din fiecare tip dintr-un director dat folosind un obiect MapTable. Numele directorului se introduce ntr-un cmp text. Initial se foloseste continutul directorului curent. 29. S se defineasc o clas TableCalc pentru un tabel de calcul, n care celulele pot contine text, numere sau formule simple (sume pe linii sau pe coloane). Formulele se recalculeaz automat la modificarea numerelor din celulele continute n formule. La selectarea unei celule se afiseaz continutul sau valoarea celulei ntr-un cmp text situat deasupra tabelului. In celula din tabel se afiseaz rezultatul formulei, iar formula se introduce, se afiseaz si se editeaz n acelasi cmp text. Variante: a) clasa TableCalc ca subclas a clasei JTable; b) TableCalc ca subclas a clasei JPanel. 30. Program cu interfat grafic Swing pentru crearea interactiv si afisarea unui arbore ntr-un obiect JTree. Nodul rdcin este creat nainte de afisare si contine de exemplu sirul doc. Adugarea unui nod nou de ctre utilizator se face astfel: este selectat un nod din arbore si apoi se introduce ntr-un cmp text un sir; cu acest sir se creaz un nod nou, adugat ca fiu nodului selectat (considerat ca nod printe). S se adauge apoi programului un buton pentru eliminarea unui nod selectat din arbore. 31. S se defineasc: - O clasa TNode, derivat din DefaultMutableTreeNode, cu o variabil suplimentara "boolean expanded" si metode de modificare si de acces la aceasta variabil (care arat dac acest nod este expandat). - O clasa TreeList, derivat din JList si care implementeaz interfata ListSelectionListener, cu un constructor ce are un argument de tip TNode (rdcina arbore) si care permite afisarea unui arbore ntr-un obiect JList. Clasa permite expandarea si contractia nodurilor selectate prin mouse (care nu sunt frunze). - O clas derivat din JFrame, care contine un cmp text si un obiect TreeList pentru afisarea unui arbore de fisiere si subdirectoare pentru directorul al crui nume s-a introdus n cmpul text. Initial se afiseaz continutul directorului curent. 32. S se scrie un program cu interfat grafic care permite afisarea fisierelor dintr-un director dat si afisarea atributelor unui fisier selectat. Componente obligatorii: - JList pentru lista de fisiere - JTextField ptr nume director - JTextField ptr masca de filtrare (foloseste numai caracterul special ?)

- JTextField ptr atribute fisier selectat - JTextField pentru criteriul de ordonare - JButton pentru comanda afisrii (dup introducere nume director, filtru si alegere criteriu de ordonare). Dac un camp text nu contine nimic se consider c nu se filtreaz sau nu se ordoneaz lista de fisiere. 33. S se defineasc o clas "Finder" care s caute ntr-un fisier text toate liniile care contin un sir dat si s creeze un dictionar avnd drept chei numere de linii si drept valori chiar liniile din fisier. Constructor cu argument numele fisierului. Metode: find (String) si findWord (String, String delim) (numai cuvinte separate prin delimitatorii specificati la cutare). S se scrie un program cu interfat grafic care permite gsirea liniilor dintr-un fisier dat care contin un sir dat. Se va folosi un obiect de tip Finder. Componente: - JList cu numerele liniilor gsite si primele 30 caractere din linie - JTextField cu numele fisierului - JTextField pentru introducerea sirului cutat n fisier - JTextField pentru afisarea liniei selectate din lista cu numere de linii - JButton "Find" pentru cutare n fisier si afisare pe ecran