Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałSzczepan Buczkowski Został zmieniony 11 lat temu
1
Java applet (c.d.) Nguyen Hung Son Uniwersytet Warszawski
2
Tematy Rozmieszczenie komponentów Obsługi zdarzeń Przykłady
3
Rozmieszczanie komponentów Obsługa poszczególnych komponentów jest prosta. Definiujemy: właściwości komponentu oraz jego reakcje na generowane zdarzenia
4
Rozmieszczenie komponentów Zarządca rozmieszczenia (ang. Layout Manager): Pojemnik rozmieszcza nowo elementy zgodnie z przypisanym do niego Layout Manager Layout Manager określa sposób wyświetlania komponentów dołączonych do pojemnika Przykład: public void init() {... setLayout(new BorderLayout()); add("South", panel); add("North", btnZerowanie); add("Center", lblWartosc);
5
Typy rozmieszczenia Można komponety umieścić według następujących schematów: FlowLayout BorderLayout GridLayout GridBagLayout CardLayout
6
FlowLayout: ciągłe rozmieszczenie elementów: jednego za drugim; gdy dany komponent nie mieści się w wierszu, przenoszony jest do następnego wiersza, np.... setLayout(new FlowLayout()); for(int i = 0; i < 20; i++) add(new Button("Button " + i));...
7
BorderLayout: rozmieszczenie brzegowe, polega na rozmieszczeniu komponentów na obrzeżach i w środku pojemnika; miejsca umieszczenia w pojemniku określane są za pomocą nazw stron świata: West, East, North, South, Center; nazywane jest także rozmieszczeniem grawitacyjnym. Np. public void init() { setLayout(new BorderLayout()); add(BorderLayout.NORTH, new Button("Północ")); add(BorderLayout.SOUTH, new Button("Południe")); add(BorderLayout.EAST, new Button("Wschód")); add(BorderLayout.WEST, new Button("Zachód")); add(BorderLayout.CENTER, new Button("Środek")); }
8
GridLayout rozmieszczenie siatkowe, rozmieszczenie komponentów w prostokątnej siatce o podanej liczbie kolumn i wierszy; wszystkie klatki tej siatki mają identyczne rozmiary, np.... setLayout(new GridLayout(7,3)); for(int i = 0; i < 20; i++) add(new Button("Button " + i));...
9
GridBagLayout rozmieszczenie "torebkowe", komponenty rozmieszczane są w prostokątnym układzie torebek o podanych rozmiarach; jednak rozmiary torebek nie muszą być identyczne - jak w przypadku GridLayut; sposób rozmieszczenia elementów w torebkach określa obiekt typu GridBagConstraints definiujący więzy (ang. constraints).
10
BoxLayout Wiele programistów mają kłopot z użyciem GridBagLayout W pakiecie javax.swing.* zaoferowano prostsze rozwiązanie: BoxLayout; Rozmieszcza komponenty poziomo lub pionowo Przestrzeń między komponentami są kontrowane za pomocą struts (pręty) i glue (guma lub sprężyna) i rigid (sztywna przestrzeń)
11
Użycie BoxLayout Konstruktor BoxLayout: Panel pion = new Panel(); pion.setLayout(new BoxLayout(pion, BoxLayout.Y_AXIS)); for (int i = 0; i < 5; i++) pion.add(new Button(pion "+i)); Panel poz = new Panel(); poz.setLayout(new BoxLayout(poz, BoxLayout.X_AXIS)); for (int i = 0; i < 5; i++) poz.add(new Button("jph " + i)); setLayout(new BorderLayout()); add(BorderLayout.WEST, pion); add(BorderLayout.NORTH, poz); Udogodnienie: Box Dwie statyczne metody: Box.createVerticalBox(); Box.createHorizontalBox(); Np. Box bv = Box.createVerticalBox(); for(int i = 0; i < 5; i++) bv.add(new JButton(pion " + i)); Box bh = Box.createHorizontalBox(); for(int i = 0; i < 5; i++) bh.add(new JButton(poz " + i)); setLayout(new BorderLayout()); add(BorderLayout.EAST, bv); add(BorderLayout.SOUTH, bh);
12
Strut, glue czy regid? Box bh = Box.createHorizontalBox(); for (int i = 0; i < 4; i++){ bh.add(new Button("bh " + i)); bh.add(Box.createHorizontalGlue()); } Box bv = Box.createVerticalBox(); for (int i = 0; i < 5; i++) { bv.add(new Button("bv " + i)); bv.add(Box.createVerticalStrut(i*10)); } bv.add(Box.createRigidArea(new Dimension(120, 40))); bv.add(bh); setLayout(new BorderLayout()); add(BorderLayout.SOUTH, bv);
13
CardLayout rozmieszczenie kartkowe; komponenty rozmieszczane są na wzajemnie zasłaniających się kartkach.
14
Domyślne rozmieszczenie Podczas tworzenia pojemnika przypisany jest mu zarządca domyślny dla apletu i panelu - FlowLayout dla okna ( Window) i ramki ( Frame) - BorderLayout.
15
Obsługi zdarzeń Interakcja z użytkownikiem; Użytkownik kontaktuje się z appletem przez urządzenie zewnętrzne: Klawiatura Myszka Istnieją dwa modele obsługi zdarzeń: Tradycyjny model: Implementowany w JDK 1.0; niezalecany (deprecated) w obecnej wersji; Delegacyjny model: preferowany zamiast tradycyjnego modelu
16
Tradycyjny model obsługi zdarzeń Tradycyjny model obsługi zdarzeń jest oparty o dziedziczenie. Zdarzenie, po swoim wystąpieniu dla obiektu danej klasy, jest: albo obsługiwane przez metodę: action (zdarzenia generowane przez użytkownika) handleEvent (zdarzenia generowane przez komponenty graficzne); keyDown, keyUp,... mouseDown, mouseUp, mouseGrag,... lub przekazane do klasy nadrzędnej.
17
Tradycyjny model: metoda action(Event, Object) public boolean action(Event evt, Object arg) { // Gdy nacisnieto przycisk btnNastepna if (evt.target == btnNastepna) { lblWartosc.setText(Integer.toString(++m_nWartosc)); return true; } else if (evt.target == btnPoprzednia) { lblWartosc.setText(Integer.toString(--m_nWartosc)); return true; } else if (evt.target == btnZerowanie) { m_nWartosc = 0; lblWartosc.setText(Integer.toString(m_nWartosc)); return true; } return false; }
18
Zdarzenia w Appletach import java.applet.Applet; import java.awt.*; public class EventTutor extends Applet { public void init() { System.out.println("init event"); } public void start() { System.out.println("start event"); } public void destroy() { System.out.println("destroy event"); } public void paint(Graphics g) { System.out.println("paint event"); } public void update(Graphics g) { System.out.println("update event"); } public boolean keyDown(Event e, int x){ System.out.println("The " + ( char ) x + " key was pressed."); return true; }
19
Zdarzenia public boolean mouseUp(Event e, int x, int y) { System.out.println("mouseUp event"); return false; } public boolean mouseDown(Event e, int x, int y){ System.out.println("mouseDown event"); return false; } public boolean mouseDrag(Event e, int x, int y) { System.out.println("mouseDrag event"); return false; } public boolean mouseMove(Event e, int x, int y) { System.out.println("mouseMove event"); return false; } public boolean mouseEnter(Event e, int x, int y) { System.out.println("mouseEnter event"); return false; } public boolean mouseExit(Event e, int x, int y) { System.out.println("mouseExit event"); return false; } public void getFocus() { System.out.println("getFocus event"); } public void gotFocus() { System.out.println("gotFocus event"); } public void lostFocus() { System.out.println("lostFocus event"); }
20
Interakcja - przykład rysownika import java.applet.Applet; import java.awt.*; import java.util.Vector; public class Rysownik extends Applet { Vector points = new Vector(); public void paint(Graphics g) { int x1, y1, x2, y2; Point tempPoint; if (points.size() > 1) { tempPoint = (Point) points.elementAt(0); x1 = tempPoint.x; y1 = tempPoint.y; for ( int i = 1; i < points.size(); i++) { tempPoint = (Point)points.elementAt(i); x2 = tempPoint.x; y2 = tempPoint.y; g.drawLine(x1, y1, x2, y2); x1 = x2; y1 = y2; } // end for } // end if } public boolean mouseDown(Event e, int x, int y){ points.addElement(new Point(x, y)); return true; } public boolean mouseDrag(Event e, int x, int y) { points.addElement(new Point(x, y)); repaint(); return true; } public boolean mouseUp(Event e, int x, int y) { points.addElement(new Point(x, y)); repaint(); return true; }
21
Delegacyjny model obsługi zdarzeń Deklaracja klasy (przeznaczonej do obsługi) implementującej odpowiedni interfejs nasłuchujący lub dziedziczącej z klasy, która to implementuje. Przykład : public class MojAplet extends Applet implements ActionListener
22
Delegacyjny model obsługi zdarzeń Rejestracja dla danego komponentu obiektu klasy nasłuchującej. Ogólnie, napis: źródłoZdarzeń.addxxxxListener(obiektKlasyNasł uchującej); oznacza, że dla obsługi zdarzeń generowanych przez obiekt źródłoZdarzeń, zarejestrowano obiekt obiektKlasyNasłuchującej implementujący interfejs nasłuchujący xxxxxListener. typ nasłuchu, np.
23
Delegacyjny model obsługi zdarzeń Implementacja metod z interfejsu nasłuchującego. Interfejs ActionListener posiada tylko jedną metodę do implementacji : public void actionPerformed(ActionEvent evt) { // deklaracja reakcji na zdarzenia }
24
Przykłady: import java.applet.Applet; import java.awt.event.*; import java.awt.*; public class listener extends Applet { private Button b1 = new Button("Button 1"), b2 = new Button("Button 2"); private TextField txt = new TextField(10); private ButtonListener bl = new ButtonListener(); public void init() { b1.addActionListener(bl); b2.addActionListener(bl); this.setLayout(new FlowLayout()); this.add(b1); this.add(b2); this.add(txt); } class ButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { String name; name = ((Button)e.getSource()).getLabel(); txt.setText(name); }
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.