Wykład 12: Obsługa Zdarzeń

Podobne dokumenty
Obsługa zdarzeń. Wykład 4

Java SE Laboratorium nr 5. Temat: Obsługa zdarzeń

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

Programowanie zdarzeniowe

Programowanie zdarzeniowe

Podstawowe informacje o apletach

Języki i metody programowania Java Obsługa zdarzeń - przykłady

Marcin Luckner Warsaw University of Technology Faculty of Mathematics and Information Science

LABORATORIUM 7 Cel: 1_1

setdefaultcloseoperation(jframe.exit_on_close);//obsługa zamykania aplikacji setvisible(true); } //wyświetlenie okna

Programowanie graficznych interfejsów użytkownika

Tworzenie i obsługa graficznego interfejsu uŝytkownika

GUI - projektowanie interfejsów cz. II

Programowanie obiektowe

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Programowanie obiektowe

Java biblioteka Swing

Programowanie obiektowe

SWING. dr Jarosław Skaruz

Multimedia JAVA. Historia

Applety Java. Applety są przykładem kodu Java wykonywanego po stronie klienta, ale bez ujawnionej (jak w przypadku skryptu) wersji źródłowej

Programowanie Multimediów. Programowanie Multimediów JAVA. programowanie GUI. (AWT i Swing) [1]

Wykład 11: Programowanie Apletów

Programowanie komponentowe

Graphic User Interfaces pakiet Swing

Java - interfejs graficzny

Język obiektowy o składni podobnej do C++ Zarządzanie pamięcią niepotrzebne obiekty automatycznie usuwane

Wstęp do programowania

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Interfejs graczny w Javie.

1 Atrybuty i metody klasowe

Dokumentacja do API Javy.

Tworzenie elementów graficznych

Kurs programowania. Wykład 6. Wojciech Macyna. 7 kwietnia 2016

POLIMORFIZM, INTERFEJSY, PROGRAMOWANIE ZDARZENIOWE

Informatyka I. Interfejs GUI wysokiego poziomu. Biblioteka Swing. Programowanie zdarzeniowe. Politechnika Warszawska Wydział Transportu 2018

Podstawy Programowania

Aplikacje w środowisku Java

Programowanie w języku Java WYKŁAD

Interaktywne aplety obsługa zdarzeń, uruchamianie apletu przez przeglądarkę lub maszynę wirtualną Javy. Tworzenie łącz w apletach

PROJEKTOWANIE ABSTRAKCYJNEJ KLASY FIGURA PRZECHOWUJĄCEJ WSPÓLNE CECHY OBIEKTÓW GRAFICZNYCH

Java jako zdalny interfejs aplikacji Webowych aplety

Programowanie obiektowe zastosowanie języka Java SE

Laboratorium z informatyki sem. III/ćw. 2 Wydział Transportu PW /19 MATERIAŁY POMOCNICZE DO ĆWICZENIA 2

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Spis treści. 1 Aplet. 2 Od aplikacji do apletu. 1 Aplet 1. 2 Od aplikacji do apletu 1. 3 Budowa apletu 3. 4 Cykl życia apletu 4

Bezpieczne uruchamianie apletów wg

Grafika i komunikacja człowiek komputer Laboratorium. Część 1: Wstęp do grafiki

Klasy abstrakcyjne, interfejsy i polimorfizm

Kurs Java TI 312[01]

Programowanie obiektowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Język Java część 2 (przykładowa aplikacja)

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

Tworzenie projektu zawierającego aplet w środowisku NetBeans. lab1. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Kontenery i komponenty graficzne

Programowanie aplikacji na urządzenia mobilne

Dziedziczenie. dr Jarosław Skaruz

Kurs programowania. Wykład 4. Wojciech Macyna. 23 marca 2016

Java niezbędnik programisty spotkanie nr 12. Graficzny interfejs użytkownika

Zastosowanie słuchaczy zdarzeń wg

UMOWY INSTRUKCJA STANOWISKOWA

Podstawy programowania obiektowego

Dodanie nowej formy do projektu polega na:

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 1

Podstawy programowania GUI niskiego poziomu. APLETY.

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Henryk Budzisz. materiały przygotowane w ramach projektu ZPORR nr POKL /08-00

Laboratorium Systemów SCADA

Henryk Budzisz. materiały przygotowane w ramach projektu ZPORR nr POKL /08-00

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Wykład 7: Pakiety i Interfejsy

Architektura interfejsu użytkownika

Java: interfejsy i klasy wewnętrzne

Programowanie obiektowe

Operatory. Składnia. Typy proste. Znaki specjalne

Temat: Programowanie zdarzeniowe. Zdarzenia: delegacje, wykorzystywanie zdarze. Elementy Windows Application (WPF Windows Presentation Foundation).

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Przykładowe roz wiązanie:

PO/X. 1. Smartphone jako uniwersalny kontroler (myszka/gamepad/pistolet/3d)

Aplikacja (oprogramowanie) będzie umożliwiać przygotowanie, przeprowadzenie badania oraz analizę wyników według określonej metody.

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Microsoft Visual C++

Języki i metody programowania Java Lab4 podejście obiektowe, zastosowanie pojemników

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Remote Method Invocation 17 listopada 2010

Diagramy klas. dr Jarosław Skaruz

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Podejście obiektowe do budowy systemów rozproszonych

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

DIAGNOSTYKA DIAGNOSTYKA

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Wykład 5 Okna MDI i SDI, dziedziczenie

PWŚG Ćwiczenia 13. Ukończoną pracę należy przesłać na adres lub

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Transkrypt:

Wykład 12: Obsługa Zdarzeń

Zdarzenia Aplety są sterowane zdarzeniami. Większość zdarzeń jest generowana przez: mysz klawiaturę elementy interfejsu graficznego Obsługa zdarzeń jest zawarta w pakiecie java.awt.event.

Model Delegowania Zdarzeń Delegowanie zdarzeń: źródło generuje zdarzenia zdarzenia są wysyłane do słuchaczy Słuchacz musi zarejestrować się u źródła aby otrzymywać zawiadomienia o zdarzeniach. Słuchacz normalnie czeka na otrzymanie zdarzenia, po czym obsługuje je i natychmiast powraca.

Zdarzenia i Ich Źródła Zdarzenie jest obiektem który opisuje zmianę stanu swojego źródła, spowodowaną np. przesunięciem myszki naciśnięciem klawisza wyborem elementu w liście wyboru przepełnienie wartości licznika zakończenie działania timera Źródło jest obiektem który wygenerował zdarzenie. Może generować więcej niż jeden rodzaj zdarzenia.

Słuchacze Zdarzeń Obiekt który otrzymuje zawiadomienia o zdarzeniach: jest zarejestrowany u źródła by otrzymywać zawiadomienia o danym rodzaju zdarzeń musi implementować metody które otrzymują i przetwarzają te zdarzenia

Rejestracja/Wypisanie Słuchacza Rejestracja słuchacza do otrzymywania powiadomień o wydarzeniach typu Type: public void addtypelistener(typelistener el) Type to nazwa zdarzenia (np. Key, MouseMotion) el to odwołanie do słuchacza zdarzeń Słuchacz już nie jest zainteresowany otrzymywaniem powiadomień o zdarzeniach: public void removetypelistener(typelistener el)

Obsługa Zdarzeń Słuchacz musi implementować interfejs dla określonego rodzaju zdarzeń. Zbiór interfejsów zawarty w java.awt.events. Na przykład interfejs KeyListener posiada metody: void keypressed(keyevent ke) void keyreleased(keyevent ke) void keytyped(keyevent ke)

Klasy Zdarzeń Nadklasą wszystkich zdarzeń jest java.util.eventobject. Konstruktor zdarzeń (src to obiekt generujący): EventObject(Object src) Metody: Object getsource() String tostring() int getid() AWTEvent jest podklasą EventObject.

Typy Zdarzeń AWT AWTEvent jest nadklasą różnych typów zdarzeń generowanych przez elementy interfejsu graficznego: KeyEvent generowany gdy otrzymane jest wejście z klawiatury MouseEvent generowany gdy mysz jest przesuwana, klikana, naciskana, zwalniania, itp. ActionEvent generowany gdy naciskany jest przycisk, wybierany element menu, itp. TextEvent generowany gdy zmienia się wartość pola tekstowego itp.

Zdarzenia Myszy MouseEvent jest podklasą InputEvent, która jest podklasą AWTEvent. Jest kilka typów MouseEvent: MOUSE_CLICKED - kliknięcie MOUSE_DRAGGED - przeciąganie MOUSE_ENTERED wejście do elementu MOUSE_EXITED wyjście z elementu MOUSE_MOVED - przesuwanie MOUSE_PRESSED naciskanie MOUSE_RELEASED - zwalnianie

Konstruktor Zdarzenia Myszy MouseEvent( Odwołanie do obiektu który wygenerował zdarzenie: Component src, Typ zdarzenia myszy: int type, Czas systemowy kiedy zdarzenie zaszło: long when,

Konstruktor Zdarzenia Myszy Które modyfikatory były wciśnięte: int modifiers, Współrzędne myszy: int x, int y, Liczba kliknięć: int clicks, Czy zdarzenie spowodowało pojawienie się menu? boolean triggerspopup)

Metody Zdarzenia Myszy uzyskanie współrzędnych myszy: int getx() int gety() zmiana współrzędnych zdarzenia: void translatepoint(int x, int y) ilość kliknięć: int getclickcount()

Zdarzenia Klawiatury KeyEvent jest generowany dla wejścia z klawiatury. Trzy typy zdarzeń klawiatury: KEY_PRESSED klawisz jest naciśnięty KEY_RELEASED klawisz jest zwolniony KEY_TYPED znak jest wygenerowany Konstruktor zdarzenia klawiatury: KeyEvent(Component src, int type, long when, int modifiers, int code, char ch)

Zdarzenia Klawiatury Wirtualny kod klawisza: VK_ENTER VK_ESCAPE VK_CANCEL VK_UP VK_DOWN VK_LEFT VK_RIGHT VK_SHIFT VK_ALT Metody klasy zdarzeń klawiatury: char getkeychar() int getkeycode() CHAR_UNDEFINED gdy znak niedostępny. VK_UNDEFINED gdy kod niedostępny.

Źródła Zdarzeń Składowe graficznego interfejsu użytkownika które mogą generować zdarzenia: Button generuje ActionEvent gdy przycisk jest naciskany List generuje ActionEvent gdy element listy jest podwójnie klikany, a ItemEvent gdy element jest wybierany lub zwalniany Window generuje WindowEvent gdy okno jest aktywowane, zamykane, otwierany, minimalizowane, przywracane, usuwane

Użytkownik naciska i zwalnia klawisz 'home'. Dwa zdarzenia: naciśnięty, zwolniony. Interfejs KeyListener Interfejs do implementacji przez słuchacza klawiatury, aby ten mógł obsługiwać KeyEvent. Metody: void keypressed(keyevent ke) void keyreleased(keyevent ke) void keytyped(keyevent ke) Użytkownik naciska i zwalnia klawisz 'A'. Trzy zdarzenia: naciśnięty, znak, zwolniony.

Interfejs MouseListener Interfejs do implementacji przez słuchacza myszy, aby ten mógł obsługiwać MouseEvent. Metody: void mouseclicked(mouseevent me) void mouseentered(mouseevent me) void mouseexited(mouseevent me) void mousepressed(mouseevent me) void mousereleased(mouseevent me)

Interfejs MouseMotionListener Interfejs do implementacji przez słuchacza ruchu myszy, aby ten mógł obsługiwać MouseEvent. Metody: void mousedragged(mouseevent me) void mousemoved(mouseevent me) Obie są wywoływane wielokrotnie gdy mysz jest ciągana/przesuwana.

Użycie Modelu Delegacji Zdarzeń Aplikacja musi: implementować interfejs słuchacza tak by otrzymać powiadomienia o danym typie zdarzeń zarejestrować słuchacza jako odbiorcę powiadomień Źródło może generować kilka typów zdarzeń. Słuchacz może rejestrować odbiór wielu rodzajów zdarzeń, jednak musi implementować wszystkie interfejsy dla ich obsługi.

Przykład: Obsługa Zdarzeń Myszy import java.awt.*; import java.awt.event.*; import java.applet.*; /* <applet code="mouseevents" width=300 height=100> </applet> */ Aplet, implementuje oba interfejsy zdarzeń myszy: public class MouseEvents extends Applet implements MouseListener, MouseMotionListener {

Przykład: Obsługa Zdarzeń Myszy Wiadomość do wyświetlenia i współrzędne myszy: String msg = ""; int mousex = 0, int mousey = 0; Aplet rejestruje się jako słuchaczy zdarzeń myszy: public void init() { addmouselistener(this); addmousemotionlistener(this);

Przykład: Obsługa Zdarzeń Myszy Implementacja wszystkich metod w interfejsach MouseListener i MouseMotionListener. Gdy myszka naciśnięta, tekst w rogu okna apletu: // Handle mouse clicked. public void mouseclicked(mouseevent me) { // save coordinates mousex = 0; mousey = 10; msg = "Mouse clicked."; repaint();

Przykład: Obsługa Zdarzeń Myszy Gdy wchodzi do (wychodzi z) obszar apletu, wyświetla się tekst w rogu okna apletu: public void mouseentered(mouseevent me) { mousex = 0; mousey = 10; msg = "Mouse entered."; repaint(); public void mouseexited(mouseevent me) { mousex = 0; mousey = 10; msg = "Mouse exited."; repaint();

Przykład: Obsługa Zdarzeń Myszy Gdy myszka przyciśnięta/zwolniona, wyświetla się odpowiedni tekst na bieżącej pozycji: public void mousepressed(mouseevent me) { mousex = me.getx(); mousey = me.gety(); msg = "Down"; repaint(); public void mousereleased(mouseevent me) { mousex = me.getx(); mousey = me.gety(); msg = "Up"; repaint();

Przykład: Obsługa Zdarzeń Myszy Gdy myszka jest ciągniona wyświetla się '*' na bieżącej pozycji i tekst w oknie statusu: public void mousedragged(mouseevent me) { mousex = me.getx(); mousey = me.gety(); msg = "*"; showstatus("dragging mouse at " + mousex + ", " + mousey); repaint(); public void mousemoved(mouseevent me) { showstatus("moving mouse at " + me.getx() + ", " + me.gety());

Przykład: Obsługa Zdarzeń Myszy Wyświetla się wiadomość na danych współrzędnych: // Display msg in applet window // at current X,Y location. public void paint(graphics g) { g.drawstring(msg, mousex, mousey);

Obsługa Zdarzeń Klawiatury Obsługa zdarzeń klawiatury: aplet implementuje interfejs KeyListener. Za każdym razem gdy użytkownik naciska klawisz, generowanych jest 2-3 zdarzeń. Gdy chodzi nam tylko o wpisywane znaki, możemy ignorować zdarzenia naciśnięcia/zwolnienia klawiszy.

Przykład: Obsługa Zdarzeń Klawiatury Aplet, implemetuje interfejs nasłuchu klawiatury: import java.awt.*; import java.awt.event.*; import java.applet.*; /* <applet code="keyevents" width=300 height=100> </applet> */ public class KeyEvents extends Applet implements KeyListener { String msg = ""; int X = 10, Y = 20; // output coordinates

Przykład: Obsługa Zdarzeń Klawiatury Rejestracja apletu jako słuchacza zdarzeń klawiatury: public void init() { addkeylistener(this); requestfocus(); // request input focus Obsługa zdarzenia naciśnięcia klawisza: public void keypressed(keyevent ke) { showstatus("key Down"); int key = ke.getkeycode(); switch(key) {

Przykład: Obsługa Zdarzeń Klawiatury case KeyEvent.VK_F1: msg += "<F1>";break; case KeyEvent.VK_F2: msg += "<F2>";break; case KeyEvent.VK_F3: msg += "<F3>";break; case KeyEvent.VK_PAGE_DOWN: msg += "<PgDn>";break; case KeyEvent.VK_PAGE_UP: msg += "<PgUp>";break; case KeyEvent.VK_LEFT: msg += "<Left Arrow>";break; case KeyEvent.VK_RIGHT: msg += "<Right Arrow>";break; repaint();

Przykład: Obsługa Zdarzeń Klawiatury Obsługa zdarzenia zwolnienia klawisza: public void keyreleased(keyevent ke) { showstatus("key Up"); Obsługa zdarzenia otrzymania znaku: public void keytyped(keyevent ke) { msg += ke.getkeychar(); repaint();

Przykład: Obsługa Zdarzeń Klawiatury Wyświetla komunikat na danych współrzędnych: // Display keystrokes. public void paint(graphics g) { g.drawstring(msg, X, Y);

Adapter Obsługi Zdarzeń Adapter: ułatwia tworzenie klas obsługi zdarzeń. Dostarcza puste implementacje wszystkich metod w danym interfejsie zdarzeń. Wystarczy dziedziczyć po klasie odpowiedniego adaptera, implementując tylko te zdarzenia które nas interesują.

public class AdapterDemo extends Applet { public void init() { addmouselistener(new MyMouseAdapter(this)); addmousemotionlistener( new MyMouseMotionAdapter(this)); Przykład: Adapter Aplet, rejestracja słuchacza zdarzeń myszy: import java.awt.*; import java.awt.event.*; import java.applet.*; /* <applet code="adapterdemo" width=300 height=100> </applet> */

Przykład: Adapter Klasa obsługująca zdarzenia myszy, implementuje tylko jedną metodę: class MyMouseAdapter extends MouseAdapter { AdapterDemo adapterdemo; public MyMouseAdapter( AdapterDemo adapterdemo){ this.adapterdemo = adapterdemo; // Handle mouse clicked. public void mouseclicked(mouseevent me) { adapterdemo.showstatus("mouse clicked");

Przykład: Adapter Klasa obsługująca zdarzenia ruchu myszy, implementuje tylko jedną metodę: class MyMouseMotionAdapter extends MouseMotionAdapter { AdapterDemo adapterdemo; public MyMouseMotionAdapter( AdapterDemo adapterdemo) { this.adapterdemo = adapterdemo; // Handle mouse dragged. public void mousedragged(mouseevent me) { adapterdemo.showstatus("mouse dragged");