Sunteți pe pagina 1din 41

Interfa a grafic!

cu utilizatorul - AWT

Programare Orientat! pe Obiecte

Interfa a grafic! cu utilizatorul


Modelul AWT Componentele AWT Gestionarea pozi ion!rii Gruparea componentelor Tratarea evenimentelor Tipuri de evenimente Adaptori $i clase anonime Folosirea ferestrelor

GUI Interfa a grafic! cu utilizatorul


Comunicarea vizual! ntre un program $i utilizatori. AWT(Abstract Windowing Toolkit) Swing - parte din JFC (Java Foundation Classes) Sun, Netscape $i IBM Etapele cre!rii unei aplica ii: Design Crearea unei suprafete de afi$are Crearea $i asezarea componentelor Func ionalitate Definirea unor ac iuni Ascultarea evenimentelor

Modelul AWT
l

Pachete: java.awt, java.awt.event Obiectele grafice: Component, MenuComponent. Suprafe e de afi$are: Container Gestionari de pozi ionare: LayoutManager Evenimente: AWTEvent

Exemplu: O fereastr! cu dou! butoane


import java . awt .*; public class ExempluAWT1 { public static void main ( String args []) { // Crearea ferestrei - un obiect de tip Frame Frame f = new Frame ("O fereastra "); // Setarea modului de dipunere a componentelor f. setLayout (new FlowLayout ()); // Crearea celor doua butoane Button b1 = new Button ("OK"); Button b2 = new Button (" Cancel "); // Adaugarea butoanelor f.add(b1); f.add(b2); f. pack (); // Afisarea fereastrei f. show (); } }

Componentele AWT
orice obiect care poate avea o reprezentare grafic! $i care poate interac iona cu utilizatorul. Button Canvas Checkbox, CheckBoxGroup; Choice Container Label List Scrollbar TextComponent TextField TextArea

Componente grafice

Componente grafice

Componente grafice

Componente grafice

Componente grafice

Propriet! i comune
Pozi ie getLocation, getX, getY, getLocationOnScreen setLocation, setX, setY Dimensiuni getSize, getHeight, getWidth setSize, setHeight, setWidth Dimensiuni $i pozi ie getBounds setBounds Culoare (text $i fundal) getForeground, getBackground setForeground, setBackground Font getFont setFont Vizibilitate setVisible isVisible Interactivitate setEnabled isEnabled

Suprafe e de afi$are
l l

un container este folosit pentru a ad!uga componente pe suprafa a lui Container superclasa pentru suprafe e de afi$are Window Frame - ferestre standard Dialog - ferestre de dialog Panel, Applet ScrollPane - derulare

Metode comune: add remove setLayout getInsets validate

Exemplu
Frame f = new Frame("O fereastra"); // Adaugam un buton direct pe fereastra Button b = new Button("Hello"); f.add(b); // Adaugam doua componente pe un panel Label et = new Label("Nume:"); TextField text = new TextField(); Panel panel = new Panel(); panel.add(et); panel.add(text); // Adaugam panel-ul pe fereastra // si, indirect, cele doua componente f.add(panel);

Gestionarea pozi ion!rii


Exemplu: Pozi ionarea a 5 butoane

import java . awt .*; public class TestLayout { public static void main ( String args []) { Frame f = new Frame (" Grid Layout "); f. setLayout (new GridLayout (3, 2)); Button b1 = new Button (" Button 1"); Button b2 = new Button ("2"); Button b3 = new Button (" Button 3"); Button b4 = new Button ("Long - Named Button 4"); Button b5 = new Button (" Button 5"); f.add(b1); f.add (b2); f. add(b3); f.add(b4); f.add(b5); f. pack (); f. show (); } }

Gestionarea pozi ion!rii

Frame f = new Frame("Flow Layout"); f.setLayout(new FlowLayout());

Gestionarea pozi ion!rii (2)


l

l l

Un gestionar de pozi ionare (layout manager) este un obiect care controleaz! dimensiunea $i aranjarea (pozi ia) componentelor unui container. Fiecare obiect de tip Container are asociat un gestionar de pozi ionare. Toate clasele care instan iaz! obiecte pentru gestionarea pozi ion!rii implementeaz! interfa a LayoutManager. La instan ierea unui container se creeaz! implicit un gestionar de pozi ionare asociat acestuia. (ferestre: BorderLayout, panel-uri: FlowLayout).

Folosirea gestionarilor de pozi ionare


l

Gestionari AWT FlowLayout, BorderLayout, GridLayout, CardLayout, GridBagLayout Metoda setLayout FlowLayout gestionar = new FlowLayout(); container.setLayout(gestionar); // sau: container.setLayout(new FlowLayout()); Dimensionarea getPreferredSize, getMinimumSize, getMaximumSize Pozi ionarea absolut! container.setLayout(null); Button b = new Button("Buton"); b.setSize(10, 10); b.setLocation (0, 0); b.add();

Gestionarul FlowLayout

Gestionar implicit pentru Panel.

Gestionarul BorderLayout
Cinci regiuni: NORTH, SOUTH, EAST, WEST, CENTER Implicit pentru Window

Gestionarul GridLayout
Organizare tabelar!

Gestionarul CardLayout
Pachet de c!r i Prima carte este vizibil!

A doua carte este vizibil! Swing: JTabbedPane

Gestionarul GridBagLayout
GridBagLayout gridBag = new GridBagLayout(); container.setLayout(gridBag); GridBagConstraints c = new GridBagConstraints(); //Specificam restrictiile. . .!i apoi gridBag.setConstraints(componenta, c); container.add(componenta);

Gestionarul GridBagLayout (2)


Cele mai utilizate tipuri de constrngeri pot fi specificate prin intermediul urm!toarelor variabile din clasa GridBagConstraints: gridx, gridy - celula ce reprezint! col ul stnga sus al componentei; gridwidth, gridheight - num!rul de celule pe linie $i coloan! pe care va fi afi$at! componenta; fill - folosit! pentru a specifica dac! o component! va ocupa ntreg spa iul pe care l are destinat; valorile posibile sunt HORIZONTAL, VERTICAL, BOTH, NONE; insets - distan ele dintre component! $i marginile suprafe ei sale de afi$are; anchor - folosit! atunci cnd componenta este mai mic! dect suprafa a sa de afi$are pentru a for a o anumit! dispunere a sa: nord, sud, est, vest, etc. weigthx, weighty - folosite pentru distribu ia spa iului liber; uzual au valoarea 1;
l

Gruparea componentelor
l l l

Gruparea componentelor se face folosind clasa Panel. Un panel este cel mai simplu model de container. Nu are o reprezentare vizibil!, rolul s!u fiind de a oferi o suprafa ! de afi$are pentru componente grafice, inclusiv pentru alte panel-uri. Aranjare eficient! a componentelor unei ferestre presupune: gruparea componentelor nfr! ite; aranjarea componentelor unui panel; aranjarea panel-urilor pe suprafa a ferestrei. Gestionarul implicit este FlowLayout.

Gruparea componentelor

Folosirea ferestrelor
Window: Frame, Dialog l Gestionar de pozi ionare: BorderLayout. l Window: crearea de ferestre care nu au chenar $i nici bar! de meniuri; nu interac ioneaz! cu utilizatorul ci doar ofer! anumite informa ii. l Metode: show - face vizibil! fereastra. Implicit, o fereastr! nou creat! nu este vizibil!; hide - face fereastra invizibil! f!r! a o distruge ns!; pentru a redeveni vizibila se poate apela metoda show; isShowing -testeaz! dac! fereastra este vizibil! sau nu; dispose - nchide fereastra $i $i elibereaz! toate resursele acesteia; pack - redimensioneaz! automat fereastra la o suprafa a optim! care s! cuprind! toate componentele sale; trebuie apelat! n general dup! ad!ugarea tuturor componentelor pe suprafa a ferestrei.
l

Clasa Frame
import java.awt.*; public class TestFrame { public static void main(String args[]) { Frame f = new Frame("Titlul ferestrei"); f.show(); } } import java.awt.*; class Fereastra extends Frame{ // Constructorul public Fereastra(String titlu) { super(titlu); ... } } ... Fereastra f = new Fereastra("Titlul ferestrei"); f.show();

Clasa Dialog
l

o fereastr! de dialog este dependent! de o alt! fereastr! (normal! sau tot fereastr! de dialog), numit! $i fereastr! p!rinte ferestrele de dialog pot fi:

modale: care blocheaz! accesul la fereastra p!rinte n momentul deschiderii lor, nemodale: care nu blocheaz! fluxul de intrare c!tre fereastra p!rinte

Constructori: l Dialog(Frame parinte) l Dialog(Frame parinte, String titlu) l Dialog(Frame parinte, String titlu, boolean modala) l Dialog(Frame parinte, boolean modala) l Dialog(Dialog parinte) l Dialog(Dialog parinte, String titlu) l Dialog(Dialog parinte, String titlu, boolean modala)

Clasa FileDialog
l

fereastr! de dialog folosit! pentru selectarea unui nume de fi$ier n vederea nc!rc!rii sau salv!rii unui fi$ier Constructori l FileDialog(Frame parinte) l FileDialog(Frame parinte, String titlu) l FileDialog(Frame parinte, String titlu, boolean mod) // Dialog pentru incarcarea unui fisier l new FileDialog(parinte, "Alegere fisier", FileDialog.LOAD); // Dialog pentru salvarea unui fisier l new FileDialog(parinte, "Salvare fisier", FileDialog.SAVE); l Swing: JFileChooser

Tratarea evenimentelor
Eveniment: ap!sarea unui buton, modificarea textului, nchiderea unei ferestre,etc. l Surs!: component! care genereaz! un eveniment. l Interceptarea evenimentelor generate de componentele unui program se realizeaz! prin intermediul unor clase de tip listener l Evenimentele - AWTEvent: ActionEvent, TextEvent.
l

Ascult!torii - EventListener:
l

l l

O clas! ascult!tor poate fi orice clas! care specific! n declara ia sa c! dore$te s! asculte evenimente de un anumit tip. Acest lucru se realizeaz! prin implementarea unei interfe e specifice fiec!rui tip de eveniment. Pentru ascultarea evenimentelor de tip ActionEvent clasa respectiv! trebuie s! implementeze interfa a ActionListener, pentru TextEvent interfa ! care trebuie implementat! este TextListener,etc. Toate aceste interfe e sunt derivate din EventListener. Fiecare interfa ! define$te una sau mai multe metode care vor fi apelate automat la apari ia unui eveniment

Ascult!torii - EventListener:
ActionListener, TextListener. class AscultaButoane implements ActionListener { public void actionPerformed(ActionEvent e) { // Metoda interfetei ActionListener ... } } class AscultaTexte implements TextListener { public void textValueChanged(TextEvent e) { // Metoda interfetei TextListener ... } } class Ascultator implements ActionListener, TextListener { public void actionPerformed(ActionEvent e) { ... } public void textValueChanged(TextEvent e) { ... } }

Ascult!torii (2):
Inregistrarea/eliminare unei clase n lista ascult!torilor unei componente: addTipEvenimentListener, removeTipEvenimentListener. l Tratarea evenimentelor se desf!$oar! astfel: Componentele genereaz! evenimente cnd ceva interesant se ntmpl!; Sursele evenimentelor permit oric!rei clase s! asculte evenimentele sale prin metode de tip addTIPListener; O clas! care ascult! evenimente trebuie s! implementeze interfe e specifice fiec!rui tip de eveniment acestea descriu metode ce vor fi apelate automat la apari ia evenimentelor.
l

Exemplu: Ascultarea evenimentelor a dou! butoane

Tratarea evenimentelor n ferestr!

Tipuri de evenimente
Evenimente de nivel jos - ap!sare de tast!, mi$carea mouse-ului, etc.

Evenimente semantice
- interac iunea cu o component! GUI: ap!sarea unui buton, selectarea unui articol dintr-o list!, etc.

Componentele AWT $i tipurile de evenimente generate

Interfe e ascult!tor

Evenimente de la surse multiple


l

metoda getSource returneaz! obiectul responsabil cu generarea evenimentului.

public void actionPerformed(ActionEvent e) { Object sursa = e.getSource(); if (sursa instanceof Button) { // A fost apasat un buton Button btn = (Button) sursa; if (btn == ok) {// A fost apasat butonul ok } ... } if (sursa instanceof TextField) { // S-a apasat Enter dupa editarea textului TextField tf = (TextField) sursa; if (tf == nume) { // A fost editata componenta nume } ... } }
l

ActionEvent con ine metoda getActionCommand care, implicit, returneaz! eticheta butonului care a fost ap!sat.

S-ar putea să vă placă și