Java applet (c.d.) Nguyen Hung Son Uniwersytet Warszawski.

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

Programowanie obiektowe
Programowanie obiektowe
Programowanie obiektowe Andrzej Ziółkowski Wykład 3.
Klasy i obiekty.
Wzorce.
Rysowanie GUI Określanie wyglądu komponentów
Tworzenie i obsługa programów – przykład 3 uwagi cd. Wykorzystując różne klasy biblioteki języka Java należy pamiętać w jakim pakiecie się znajdują. Wszystkie.
Sposoby implementacji asocjacji
Programowanie Obiektowe w Javie (c.d.)
Nguyen Hung Son Uniwersytet Warszawski
Programowanie obiektowe w Javie
Podstawy języka Java Nguyen Hung Son Uniwersytet Warszawski.
Wzorce projektowe Paweł Ciach.
OOP - programowanie zorientowane obiektowo w VB.NET
ODE Triggery. Wstęp n Triggery są trójką zdarzenie-warunek-akcja (event-condition- action). n Zdarzenia mogą być proste lub złożone, co zostanie omówione.
Projektowanie interfejsu Pakiet AWT, komponenty i kontenery, klasa Component, metody klasy Component, klasa Label, komponenty tekstowe, klasa TextField,
Programowanie wielowątkowe
Multimedia Obrazy i dźwięki w apletach Javy, praca z tekstem, zdarzenia od myszki, obsługa wyjątków w Javie, aplety z wątkami, animacja poklatkowa.
Programowanie sieciowe w Javie
Zaawansowane technologie Javy Wykład 1 (26 lutego 2013)
Gniazda komunikacji sieciowej w języku Java
1 Podstawy apletów Co to jest aplet, cykl życia apletu, metody apletu, metoda paint(), czcionki, kolory, parametryzowanie apletu, układ współrzędnych ekranowych,
Plan Prezentacji Wczytywanie grafiki Wyświetlanie obrazów
Czytanie, pisanie i rysowanie – cd.. Jeszcze jeden strumyk PrintStream działa jak PrintWriter, ale: Używa domyślnego (systemowego) kodowania Nie wyrzuca.
142 JAVA – sterowanie i wątki public class A20 extends javax.swing.JApplet implements ActionListener { private int licznik = 0; private JTextField t =
Język Java Wielowątkowość.
AWT i Swing, Layout Managers
przygotował Michał Wdaniec
C# Windows Forms Zastosowania Informatyki Wykład 3
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
Czym jest JavaFX? Rich Internet Application
Tadeusz Ziębakowski Zachodniopomorski Uniwersytet Technologiczny.
Podstawy inżynierii oprogramowania Zofia Kruczkiewicz
PIO 3_2, Zofia Kruczkiewicz1 Wykład 3 – część druga Iteracyjno-rozwojowy cykl oprogramowania 3.
Programowanie obiektowe
Tworzenie aplikacji mobilnych
Programowanie obiektowe III rok EiT
Programowanie obiektowe
Tworzenie aplikacji mobilnych
Programowanie obiektowe – zastosowanie języka Java SE
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Programowanie obiektowe III rok EiT
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Inicjalizacja i sprzątanie
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
PIO 2_2, Zofia Kruczkiewicz1 Wykład 2 – część druga Iteracyjno-rozwojowy cykl oprogramowania 2.
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 8.
Java 3 MPDI Programowanie obiektowe W5. Java - obiektowy język programowania stworzony przez firmę Sun Microsystems. Java jest językiem tworzenia programów.
OCPJP Inner classes.
Zaawansowane komponenty graficzne Swing
Ogólna struktura programu w TP
Wstęp - Prosta aplikacja internetowa w technologii Java EE 5 Programowanie komponentowe 1.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski.
Biblioteki graficzne: Swing, AWT, SWT
Partnerstwo dla Przyszłości 1 Lekcja 28 Dziedziczenie i rodzaje dziedziczenia.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
Przeglądarka stron WWW
(według:
Zaawansowane technologie Javy Wykład 1 (23 lutego 2017)
(c) Krzysztof Barteczko 2014
Java-wykład Grafika.
Delegaty Delegat to obiekt „wiedzący”, jak wywołać metodę.
Programowanie Obiektowe – Wykład 2
Programowanie obiektowe – zastosowanie języka Java SE
PGO Interfejsy Michail Mokkas.
Zapis prezentacji:

Java applet (c.d.) Nguyen Hung Son Uniwersytet Warszawski

Tematy Rozmieszczenie komponentów Obsługi zdarzeń Przykłady

Rozmieszczanie komponentów Obsługa poszczególnych komponentów jest prosta. Definiujemy: właściwości komponentu oraz jego reakcje na generowane zdarzenia

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);

Typy rozmieszczenia Można komponety umieścić według następujących schematów: FlowLayout BorderLayout GridLayout GridBagLayout CardLayout

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));...

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")); }

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));...

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).

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ń)

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);

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);

CardLayout rozmieszczenie kartkowe; komponenty rozmieszczane są na wzajemnie zasłaniających się kartkach.

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.

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

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.

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; }

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; }

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"); }

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; }

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

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.

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 }

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); }