Documente Academic
Documente Profesional
Documente Cultură
cu utilizatorul - AWT
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
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
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);
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 (); } }
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).
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
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!
Gestionarul GridBagLayout
GridBagLayout gridBag = new GridBagLayout(); container.setLayout(gridBag); GridBagConstraints c = new GridBagConstraints(); //Specificam restrictiile. . .!i apoi gridBag.setConstraints(componenta, c); container.add(componenta);
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
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.
Interfe e ascult!tor
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.