Poo Laboratoare 1. Laborator Programare cu JTable & JTree JTable JTree... 2

Similar documents
GRAFURI NEORIENTATE. 1. Notiunea de graf neorientat

VISUAL FOX PRO VIDEOFORMATE ŞI RAPOARTE. Se deschide proiectul Documents->Forms->Form Wizard->One-to-many Form Wizard

Parcurgerea arborilor binari şi aplicaţii

PREZENTARE INTERFAŢĂ MICROSOFT EXCEL 2007

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

Pasul 2. Desaturaţi imaginea. image>adjustments>desaturate sau Ctrl+Shift+I

Modalităţi de redare a conţinutului 3D prin intermediul unui proiector BenQ:

Sistemul de operare Windows (95, 98) Componenta My Computer

Split Screen Specifications

Ghid de instalare pentru program NPD RO

Anexa 2. Instrumente informatice pentru statistică

Exerciţii Capitolul 4

Split Screen Specifications

Aplicatii ale programarii grafice in experimentele de FIZICĂ

9. MENIURI si OBIECTE MULTIMEDIA

Mail Moldtelecom. Microsoft Outlook Google Android Thunderbird Microsoft Outlook

SUBIECTE CONCURS ADMITERE TEST GRILĂ DE VERIFICARE A CUNOŞTINŢELOR FILIERA DIRECTĂ VARIANTA 1

riptografie şi Securitate

Un tip de data este caracterizat de: o O mulţime de date (valori є domeniului) o O mulţime de operaţii o Un identificator.

O abordare orientată pe componente generice pentru crearea dinamică a interfeţelor cu utilizatorul

Laboratorul 1. MS Word

LESSON FOURTEEN

Laboratorul 1. Primii paşi în Visual Basic.NET

Reprezentări grafice


Circuite Basculante Bistabile

Conferinţa Naţională de Învăţământ Virtual, ediţia a IV-a, Graph Magics. Dumitru Ciubatîi Universitatea din Bucureşti,

Geographical data management in GIS systems

10 Estimarea parametrilor: intervale de încredere

Clasele de asigurare. Legea 237/2015 Anexa nr. 1

Ghidul administratorului de sistem

6. MPEG2. Prezentare. Cerinţe principale:

Algoritmică şi programare Laborator 3

TTX260 investiţie cu cost redus, performanţă bună

MANUAL DE UTILIZARE. 2. Nomenclator Curs Produse Clienti Introducere Facturi

22METS. 2. In the pattern below, which number belongs in the box? 0,5,4,9,8,13,12,17,16, A 15 B 19 C 20 D 21

Obiectivele acestui modul sunt:

Click pe More options sub simbolul telefon (în centru spre stânga) dacă sistemul nu a fost deja configurat.

Application form for the 2015/2016 auditions for THE EUROPEAN UNION YOUTH ORCHESTRA (EUYO)

BAZE DE DATE SI PRELUCRARI STATISTICE

Teoreme de Analiză Matematică - II (teorema Borel - Lebesgue) 1

ELEMENTE DE INTERFATA ALE UNUI SISTEM DE OPERARE

Defuzzificarea într-un sistem cu logică fuzzy. Aplicaţie: maşina de spălat cu reguli fuzzy. A. Obiective. B. Concepte teoretice ilustrate

Operaţiile de sistem de bază

PROBLEME DE TEORIA NUMERELOR LA CONCURSURI ŞI OLIMPIADE

4 Caracteristici numerice ale variabilelor aleatoare: media şi dispersia

CAPITOLUL 2. PROIECTAREA MODELULUI RELAŢIONAL AL DATELOR PRIN NORMALIZARE

Press review. Monitorizare presa. Programul de responsabilitate sociala. Lumea ta? Curata! TIMISOARA Page1

CE LIMBAJ DE PROGRAMARE SĂ ÎNVĂŢ? PHP vs. C# vs. Java vs. JavaScript

Curs 3 Word 2007 Cuprins

ARHITECTURA CALCULATOARELOR 2003/2004 CURSUL 10

CUPRINS CAP. 1. PREZENTARE GENERALĂ

1. Funcţii speciale. 1.1 Introducere

CAPITOLUL 2. FACILITATILE SI ARHITECTURA SISTEMULUI ORACLE

Asistenţă Conţinutul ambalajului Cablu Ethernet Mărci comerciale Router cu modem AC1600 WiFi VDSL/ADSL Conformitate Cablu telefonic Router cu modem

Capitolul V MODELAREA SISTEMELOR CU VENSIM

DIRECTIVA HABITATE Prezentare generală. Directiva 92/43 a CE din 21 Mai 1992

Biostatistică Medicină Generală. Lucrarea de laborator Nr Intervale de încredere. Scop: la sfârşitul laboratorului veţi şti:

MODULUL 2 UTILIZAREA SISTEMULUI DE OPERARE WINDOWS XP CURSUL UTILIZAREA CALCULATORULUI PERSONAL; APLICAREA TIC ÎN ŞCOALĂ ŞI AFACERI

2. PORŢI LOGICE ( )

9.1. Structura unităţii de I/E. În Figura 9.1 se prezintă structura unui sistem de calcul împreună cu unitatea

2 MEDIUL BAZELOR DE DATE

Introducere De ce această carte?... 8 Eficienţă maximă... 8 Scurt Istoric... 9 De ce C#? Capitolul I : Să ne pregătim...

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

b) Sa se afiseze numele salariatilor al caror salariu este mai mare decat salariul lui Kevin Mourgos.

O VARIANTĂ DISCRETĂ A TEOREMEI VALORII INTERMEDIARE

Hama Telecomanda Universala l in l

Universitatea din Bucureşti. Facultatea de Matematică şi Informatică. Şcoala Doctorală de Matematică. Teză de Doctorat

Biraportul în geometria triunghiului 1

Autonet Service Manager

Ghid de utilizare a platformei e-learning

declarare var <identif>:array[<tip1>,<tip2>,...] of <tip_e>; var a: array[1..20] of integer; (vector cu 20 elemente)

OPTIMIZAREA GRADULUI DE ÎNCĂRCARE AL UTILAJELOR DE FABRICAŢIE OPTIMIZING THE MANUFACTURING EQUIPMENTS LOAD FACTOR

Ghid de Instalare Windows Vista

Referat II. Arhitectura unei interfeţe avansate pentru un Sistem Suport pentru Decizii. Coordonator ştiinţific: Acad. prof. dr. ing. Florin G.

ice~felix' COMPUTER S.A.

Programul de instruire ADM1 Reţele de comunicaţii

Rigla şi compasul. Gabriel POPA 1

Cu ce se confruntă cancerul de stomac? Să citim despre chirurgia minim invazivă da Vinci

PREZENTARE CONCURSUL CĂLĂRAŞI My joy is my sorrow unmasked. 1

Structura sistemelor de operare Windows şi Linux

LIMBAJUL SQL 1. GENERALITĂŢI

INTRODUCERE DEMONSTRATIVĂ LECŢIE OPERATOR CALCULATOR

EPI INFO. - Cross-tabulation şi testul 2 -

3. CPU 3.1. Setul de regiştri. Copyright Paul GASNER

Implementarea unei aplicaţii pentru sisteme e-learning cu capabilităţi multimedia streaming

Geometrie euclidian¼a în plan şi în spaţiu. Petru Sorin Botezat

Sisteme de operare şi programe specifice. Material de predare partea a I-a. Material de învăţare

OLIMPIADA INTERNAŢIONALĂ DE MATEMATICĂ FORMULA OF UNITY / THE THIRD MILLENIUM 2014/2015 RUNDA A DOUA

Formatul de date raster

IBM Sterling B2B Integration Services

De ce calcul paralel?

Executive Information Systems

ARHITECTURA SISTEMELOR DE CALCUL ŞI SISTEME DE OPERARE. LUCRĂRILE DE LABORATOR Nr. 12, 13 şi 14

GREUTATE INALTIME IMC TAS TAD GLICEMIE

Maria plays basketball. We live in Australia.

Manual de utilizare. Oricând aici pentru a vă ajuta HMP5000. Întrebare? Contactaţi Philips

Manual de utilizare 49PUS PUS PUS8503

E-MANUAL. Model Număr de serie

STANDARDIZAREA PROCESELOR ŞI A ACTIVITǍŢILOR ÎN ORGANIZAŢIILE INDUSTRIALE PRIN IMPLEMENTAREA SISTEMULUI DE FABRICAŢIE LEAN

Transcription:

Poo Laboratoare 1 Contents Laborator12 2 1 Programare cu JTable & JTree 2 1.1 JTable........................................... 2 1.2 JTree............................................ 2 2 Probleme de laborator 4 2.1 Problema 1........................................ 4 2.2 Problema 2........................................ 4 2.3 Problema 3........................................ 4 2.4 Problema 4........................................ 4 2.5 Problema 5........................................ 5 2.6 Problema 6 (bonus).................................... 5 1 http://www.google.ro/ 1

Laborator12 Programare Orientată pe Obiecte: Laborator 12 1 Programare cu JTable & JTree 1.1 JTable Clasa JTable este folosită pentru a afişa şi edita tabele de celule în două dimensiuni. Consultaţi tutorialul How to Use Tables 2 pentru documentaţie task-oriented şi exemple de utilizare. JTable deţine numeroase facilităţi care permit customizarea după preferinţe dar în acelaşi timp oferă şi opţiuni standard pentru aceste facilităţi astfel încât tabele simple pot fi create foarte rapid şi uşor. De exemplu, un tabel cu 10 linii şi 10 coloane se poate obţine astfel: TableModel datamodel = new AbstractTableModel() { public int getcolumncount() { return 10; public int getrowcount() { return 10; public Object getvalueat( int row, int col ) { return new Integer( row * col ); ; JTable table = new JTable( datamodel ); JScrollPane scrollpane = new JScrollPane( table ); Când se doreşte scrierea de aplicaţii care folosesc JTable, este necesar să se acorde puţină atenţie structurilor de date care vor reprezenta datele din tabel. DefaultTableModel este o implementare de model care foloseşte un vector de vectori de obiecte (de tipul Object) pentru a stoca valorile din celule. La fel cum se pot copia datele dintr-o aplicaţie în instanţa DefaultTableModel, este de asemenea posibil să se ascundă datele în metodele interfeţei TableModel astfel încât acestea să poată fi transmise direct către JTable, la fel ca în exemplul de mai sus. Această abordare duce deseori la aplicaţii mai eficiente deoarece modelul este liber să aleagă reprezentarea internă care se potriveşte cel mai bine datelor manipulate. Se recomandă folosirea AbstractTableModel ca şi clasă de bază pentru crearea de subclase, respectiv DefaultTableModel atunci când subclasarea nu este necesară. JTable foloseşte exclusiv variabile întregi pentru a referi liniile şi coloanele modelului pe care îl afişează. Este folosită metoda getvalueat( int, int ) pentru a întoarce valorile din model pe parcursul desenării. Coloanele pot fi rearanjate în tabel astfel încât acestea să apară într-o ordine diferită faţă de cea din model. Acest fapt nu afectează deloc implementarea: atunci când coloanele sunt rearanjate, obiectul de tip JTable menţine intern noua ordine şi converteşte indicii coloanelor înainte de orice interogare a modelului. Aşadar, la programarea unui TableModel, nu este necesară ascultarea după evenimente de reordonare de coloane, întrucât modelul va fi interogat în sistemul propriu de coordonate indiferent de ce se întamplă în vizualizare. În versiunea curentă de Java sunt adăugate metode la clasa JTable care permit acces convenient către nevoi obişnuite de afişare. Noile metode print() adaugă cu uşurinţă suport de printare aplicaţiei ce se doreşte a fi dezvoltată. În plus, noua metodă getprintable( javax.swing.jtable.printmode, java.text.messageformat, java.text.messageformat ) este disponibilă pentru necesităţi avansate. La fel ca pentru toate clasele JComponent, se pot folosi InputMap şi ActionMap pentru a asocia o acţiune cu tastă şi a executa acţiunea în condiţii specificate. 1.2 JTree Pentru documentaţie task- Clasa JTree perminte afişarea datelor ierarhice (sub forma unei schiţe). oriented şi exemple de utilizare consultaţi tutorialul How to Use Trees 3. 2 http://java.sun.com/docs/books/tutorial/uiswing/components/table.html 3 http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html 2

Un nod specific poate fi identificat fie printr-un TreePath (un obiect care încapsulează nodul şi toţi strămoşii acestuia), fie prin linia de afişare, unde fiecare linie din zona de afişare conţine un singur nod. Un nod expandat este un nod care nu este frunză (metoda TreeModel.isLeaf( node ) întoarce false) şi care îşi va afişa copiii când toţi strămoşii săi sunt expandaţi. Un nod colapsat este un nod care îşi ascunde copiii. Un nod ascuns este un nod care este situat sub un strămoş colapsat. Toţi părinţii unui nod care poate fi vizualizat sunt expandaţi, dar aceştia pot sau nu fi afişaţi. Un nod afişat se regăseşte în zona de afişare şi poate fi vizualizat. Următoarele metode din clasa JTree folosesc cuvântul visible pentru a se referi la afişat: isrootvisible() setrootvisible() scrollpathtovisible() scrollrowtovisible() getvisiblerowcount() setvisiblerowcount() Următorul grup de metode folosesc cuvântul visible pentru a se referi la poate fi vizualizat (sub un părinte expandat): isvisible() makevisible() Pentru a detecta schimbarea selecţiei, se va implementa interfaţa TreeSelectionListener şi se va adăuga o instanţă folosind addtreeselectionlistener(). Metoda valuechanged() va fi invocată atunci când utilizatorul selectează alt nod, şi doar o dată, chiar dacă se efectuează un clic de două ori pe acelaşi nod. Cu toate acestea, pentru a face separarea cazurilor de dublu clic, indiferent de selecţia anterioară, este recomandată abordarea: final JTree tree =... ; MouseListener ml = new MouseAdapter() { public void mousepressed( MouseEvent e ) { int selrow = tree.getrowforlocation( e.getx(), e.gety() ); TreePath selpath = tree.getpathforlocation( e.getx(), e.gety() ); if( selrow!= -1 ) { if( e.getclickcount() == 1 ) { mysingleclick( selrow, selpath ); else if( e.getclickcount() == 2 ) { mydoubleclick(selrow, selpath); ; tree.addmouselistener( ml ); Pentru afişarea nodurilor complexe (de exemplu, noduri conţinând atât text, cât şi o icoană) se va implementa interfaţa TreeCellRenderer şi se va folosi metoda setcellrenderer(javax.swing.tree.treecellrenderer). Pentru a edita astfel de noduri, se va implementa interfaţa TreeCellEditor şi se va folosi metoda setcelleditor(javax.swing.tree.treecelleditor). Precizările legate de InputMap şi ActionMap sunt aceleaşi ca pentru JTable (din secţiunea anterioră). 3

2 Probleme de laborator 2.1 Problema 1 (0.5 puncte) Să se compileze şi să se execute exemplul TableExample3 anexat la textul laboratorului. 2.2 Problema 2 (1.5 puncte) Să se scrie o clasă NewTable pentru afişarea unui tabel (obiect JTable) cu atributele fişierelor dintr-un director dat: nume, dimensiune, data ultimei modificari şi dacă este director sau nu. Numele directorului se preia dintr-un câmp text. La modificarea câmpului text se va modifica şi conţinutul tabelului. 2.3 Problema 3 (3 puncte) Să se modifice programul de la punctul anterior prin adăugarea următoarelor componente grafice: două etichete JLabel (row şi col) două câmpuri text JTextField în care se vor afişa numărului liniei şi coloanei selectate de utilizator Să se definească două clase ascultător compatibile cu interfaţa ListSelectionListener, cu metoda valuechanged(), cu argument de tip ListSelectionEvent. Metoda extrage numărul liniei sau coloanei cu metoda getminselectionindex() şi afişează acest număr în câmpul text. Să se adauge cei doi ascultători la obiectele ListSelectionModel extrase cu metoda getselectionmodel(): ListSelectionModel rowsm = table.getselectionmodel(); ListSelectionModel colsm = table.getcolumnmodel().getselectionmodel(); Să se activeaze selecţia de coloane şi celule: table.setcolumnselectionallowed( true ); table.setcellselectionenabled( true ); Să se compileze şi să se execute acest program. 2.4 Problema 4 (2.5 puncte) Să se scrie un program pentru afişarea unui arbore (obiect JTree) cu fişierele dintr-un director şi din toate subdirectoarele sale. La modificarea câmpului text se modifică şi conţinutul afişat al arborelui. /* Functia recursiva de creare a arborelui pe baza unui director dat. */ static void dirlist ( File d, TNode r ) { if(!d.isdirectory() ) return; File [] files = d.listfiles(); // fisiere din directorul d for( int i = 0; i < files.length; i ++ ){ File file = files[i]; TNode s = new TNode( file ); r.add( s ); dirlist( file, s ); 4

2.5 Problema 5 (2.5 puncte) Să se adauge programului anterior posibilitatea de selecţie a unui nod din arbore, cu afişarea valorii nodului selectat într-un al doilea câmp text. Pentru a obţine nodul selectat se pot folosi mai multe metode: metoda getselectionpath() din clasa JTree (cu rezultat TreePath) metoda getlastselectedpathcomponent() din clasa JTree (cu rezultat Object) metoda getpath() din clasa TreeSelectionEvent (cu rezultat TreePath) metoda getnewleadselectionpath() din clasa TreeSelectionEvent Clasa TreePath corespunde unui vector Object[ ]. 2.6 Problema 6 (bonus) (3 puncte) Să se adauge programului de la punctul 4 un buton de ştergere a nodului selectat (împreună cu tot subarborele său). Pentru a elimina nodul curent dintr-un arbore se poate: obţine nodul părinte cu metoda currentnode.getparent() elimina un fiu din nodul părinte cu metoda model.removenodefromparent( currentnode ) 5