190 likes | 303 Views
C11 – LPO: Componente Swing si evenimente. CUPRINS Swing: JLabel JTextField JTextArea JCheckBox JRadioButton Evenimente. Obiective. După parcurgerea acestui curs ar trebuie sa puteţi: înţelege principiile de lucru cu elementele de interfata Swing;
E N D
C11 – LPO: Componente Swing si evenimente CUPRINS Swing: JLabel JTextField JTextArea JCheckBox JRadioButton Evenimente
Obiective După parcurgerea acestui curs ar trebuie sa puteţi: • înţelege principiile de lucru cu elementele de interfata Swing; • înţelege posibilitatile de pozitionare a componentelor in contianere; • modalitatea de crea o interfata grafica sigura utilizand elementele Swing: JLabel , JTextField, JTextArea, JCheckBox, JRadioButton ; • înţelege conceptul de eveniment şi crea sau modifica rutine de tratare a evenimentelor generate din JDeveopler;
Pozitionarea componentelor din interfata 1 • interfetele grafice se creeaza prin adaugarea lor in containere, cel mai folosit este JPanel-ul; • fiecare container are propriul lui manager de aranjare (layout manager) ce determina modul de pozitionare al componentelor in container; • implicit JPanel foloseste managerul numit “flow layout” (FlowLayout) ce pozitioneaza componentele de la stanga la dreapta si trece la un rand nou cand nu mai este spatiu pe randul curent; • implicit JFrame foloseste managerul “default” acesta indica doar faptul ca in locul lui se poate selecta un obiect manager de aranjare ce are anumite proprietati prin care se poate configura; • un manager utilizat des este BorderLayout, el imparte ecranul in 5 regiuni numite geografic: Nord, Sud, Est, Vest si Centru; fiecare regiune poate contine mai multe obiecte insa numai unul este afisat; daca dorim sa plasam mai multe componente intr-o regiune se pun intr-un JPanel.
Pozitionarea componentelor din interfata 2 • daca utilizatorul redimensioneaza fereastra, dimensiunile componentelor se modifica corespunzator si ele; • proprietatea constraints a componentei defineste in care dintre cele 5 regiuni se pone componenta.
Pozitionarea componentelor din interfata 3 • un alt manager utilizat des este GridLayout ce organizeaza obiectele plasate in container pe celule de linii si coloane de aceeasi marime; • redimensionarea ferestrei face ca obiecte sa-si modifice si ele marimile astfel incat sa pastreze marimea celulelor identica; • proprietati care definesc comportamentul acestui manager sunt: • columns: numarul maxim de coloane; • hgap: numarul de pixeli intre coloane; • rows: numarul maxim de randuri; • vgap: numarul maxim de pixeli intre fiecare rand. • adaugare unui manager la fereastra principala (JFrame) se face cu: this.getContentPane().setLayout(borderLayout1); • adaugarea unei container JPanel la regiunea Centru se face cu: • this.getContentPane().add(jPanel1, BorderLayout.CENTER);
JLabel • o componenta ce stocheaza si afiseaza un text (nu are decoratiuni, de exemplu margine); • nu interactioneaza cu utilizatorul, se foloseste pentru identificare; • se pot pozitiona in interiorul containerelor; • constructori: • JLabel(String text, int aliniere) > JLabel(“Text”, JLabel.Right) • JLabel(Icon simbol) • JLabel(String text) • metode: • void setText(String text): modifica textul afisat in Label; • void setIcon(Icon simbol): modifica simbolul grafic din Label (eticheta).
JTextField • citirea de text de la tastatura se poate face prin 2 componente JTextField si JTextArea; • ambele componente mostenesc de la clasa abstracta JTextComponent metodele: • void setText(String): modifica textul din compoenta la textul t; • String getText(): intoarce textul introdus in componenta; • void setEditable(boolean b): asigura activarea sau inhibarea editarii textului din componenta. • creare: • JTextField N = new JTextField();
JTextArea • asigura citirea de text mai lung de o linie; utilizatorul poate introduce orice numar de linii prin apasarea de <Enter>, fiecare linie se termina cu ‘\n’; • constructori: • JTextArea(int rows, int columns): creeaza o regiune de text de rows randuri si columns coloane; • JTextArea(String s, int rows, int columns): creeaza o regiune text cu textul initial text si rows randuri si columns coloane. • proprietati: • text, editable, columns, rows • lineWrap: true sau false dupa cum e wrappingul • wrapStyleWord: pentru true wrappingul se face la nivel de cuvinte (altfel carater) • lineCount: numarul de linii din regiune; • tabSize: numarul de caractere la care se opreste tabulatorul. • metode: • void append(String textNou): adauga textNou la textul deja existent in regiune. String text = “… Un text …/n” + “… textul continua …”; JTextArea ta = new JTextArea(); ta.setText(text);
JCheckBox • componenta asigura selectia starii de activ (da, true) sau inactiv (nu, flase); • constructori: • JCheckBox() • JCheckBox(String text) • JCheckBox(String text, boolean selected) • JCheckBox(Icon icon) • JCheckBox(String text, Icon icon) • JCheckBox(String text, Icon icon, boolean selected) • metode: • setSelected(boolean stare): seteaza starea checkbox-ului; • boolean isSelected(): intoarce starea checkbox-ului. chk1 = new JCheckBox(“Check 1”, FALSE); chk2 = new JCheckBox(“Check 2”, TRUE);
JRadioButton • sunt o varietate de checkbox. • se utilizeaza grupate, caz in care numai un buton al grupului poate fi selectat; • constructori: • JRadioButton() • JRadioButton(String text) • JRadioButton(String text, boolean selected) • JRadioButton(Icon icon) • JRadioButton(String text, Icon icon) • JRadioButton(String text, Icon icon, boolean selected) • metode: • boolean isSelected() • grupare: // Creare JRadioButton JRadioButton rb1 = JRadioButton(“Radio 1”); JRadioButton rb2 = JRadioButton(“Radio 2”, selected); // Creare grup de JRadioButtons ButtonGroup rbg = new ButtonGroup(); rbg.add(rb1); rbg.add(rb2);
Programarea orintata pe Evenimente • in programarea procedurala (clasica) instructiunile se executa secvential, la fel si procedurile ce grupreaza anumite secvente de cod; • in programarea orientata pe evenimente secventele de cod ce se executa sunt activate de evenimente; • tratarea evenimentelor se bazeaza pe modelul delegarii procesarii evenimentelor deoarece asigura un mecanism standard si consistent de generare si prelucrare a evenimentelor; • in acest model o sursa genereaza un eveniment si il trimite la mai multi listeneri (ascultatori); listenerul asteapta pina primeste un eveniment, il prelucreaza, apoi se termina; un listener trebuie sa se inregistreze cu o sursa pentru a primi o notificare de eveniment; din acest motiv notificarile se trimit numai listener-uruilor ce doresc sa le primeasca; • avantajele acestui model constau in separarea portiunii de cod ce implementeaza logica aplicatiei ce prelucreaza evenimentul de logica interfetei care a generat evenimentul; • un element de interfata poate “delega” prelucrarea unui eveniment unei portiuni de cod independente numite rutina de tratare a evenimentului.
Evenimente • in model un eveniment este un obiect ce descrie o schimbare de stare intr-o sursa; evenimentul este un semnal trimis programului ca ceva s-a modificat; • evenimentul este generat de actiuni externe ale utilizatorului cu ar fi miscarea de mouse, apasari de butoane sau de sistemul de operare prin timer-e ; • obiectul de interfata prin care s-a generat un eveniment se numseste sursa; • clasa de baza a tuturor evenimentelor este java.util.EventObj. • subclasele lui EventObj tratreaza cazuri speciale de evenimente cum ar fi: actiuni cu butoane, evenimente de fereastra, evenimente de componente, mouse sau tasatura.
Surse de evenimente, Obiecte sursa si Tipuri de evenimente Obiect TipSursa eveniment Sursa Eveniment Clic pe un buton JButtonActionEvent Modificare text JTextComponentTextEvent Clic pe un check box JCheckBox ItemEvent, ActionEvent Clic pe un eadio button JRadioButtonItemEvent, ActionEvent
Tratarea evenimentelor • un listener trebuie sa: • se inregistreze cu una sau mai multe surse pentru a primi notificari despre un tip specific de eveniment; • implementeze metode pentru a primi si prelucra notificarrile. • obiectul listener trebuie sa implementeze interfata corespunzatoare lui; de exemplu un listerent de JButton trebuie sa implementeze interfata ActionListener. Interfata ActionListener contine metoda actionPerformed(ActionEvent e) pentru tratarea evenimetului; • un obiect eveniment este transferat rutinei de tratare ce contine date referitoare la evenimet.
JDeveloper si evenimetele Swing • mediul JDeveloper simplifica mult procedura de scriere a codului pentru tratarea de evenimente • la nivelul mediului evenimentele necesita doua categorii de cod: • un listener de eveniment pentru a detecta evenimente si pentru apelarea rutinei de tratare a evenimentului si • o metoda (rutina de tratare a evenimentului) al carei cod se ruleaza atunci cand listener-ul dterenima ca acel evenimet a aparut. • rutina de tratare e evenimentului se creaza din Java Visual Editor prin clic dublu pe componenta in editorul vizual; in acest fel se creeaza automat listener-ul actionPerformed ce corespunde evenimentului implicit specific componentei; apoi din Property Inspector se creaza rutina de tratare a evenimentului; • dupa selectarea unei componente Property Ispector afiseaza toata lista de evenimente la care poate reactiona componenta;
Intrebari • Ce este un layout manager? • Ce componente Swing cunoasteti pentru introducerea de date? • Ce este programarea orientata pe evenimente? • Enumerati cateva surse de evenimente si de componente ce le pot trata. • Ce facilitati are JDeveloper pentru tratarea evenimentelor?
Bibliografie • http://www.oracle.com/technetwork/java/javase/documentation/index.html • http://docs.oracle.com/javase/6/docs/ • Ştefan Tanasă, Cristian Olaru, Ştefan Andrei, Java de la 0 la expert, Polirom, 2003, ISBN: 973-681-201-4. • Herber Schild, Java 2 - The Complete Reference, Fourth Edition, Osborne, 2001, ISBN: 0-07-213084-9. • Deitel H.M., Deitel P. J., Java - How to programm, Fith Edition, Prentice Hall, 2003, ISBN: 0-13-120236-7. • http://www.east.utcluj.ro/mb/mep/antal/downloads.html