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

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

Wykład 12: Obsługa Zdarzeń

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

Programowanie zdarzeniowe

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

Programowanie zdarzeniowe

Podstawowe informacje o apletach

Programowanie graficznych interfejsów użytkownika

Tworzenie i obsługa graficznego interfejsu uŝytkownika

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

LABORATORIUM 7 Cel: 1_1

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

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

Java biblioteka Swing

SWING. dr Jarosław Skaruz

POLIMORFIZM, INTERFEJSY, PROGRAMOWANIE ZDARZENIOWE

Programowanie obiektowe

Programowanie komponentowe

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

Programowanie obiektowe

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

Ćwiczenia 9 - Swing - część 1

Informatyka i Ekonometria Programowanie komputerów Ćwiczenia Tworzenie aplikacji wykorzystaniem graficznego interfejsu użytkownika - Swing.

Java - interfejs graficzny

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

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

GUI - projektowanie interfejsów cz. II

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

Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com

Tworzenie elementów graficznych

Przykładowe roz wiązanie:

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

Klasy abstrakcyjne. Klasę abstrakcyjną tworzymy przy pomocy modyfikatora abstract

Aplikacje w środowisku Java

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

package pakieta; import pakietb.b; package pakietb; public class B { B(){} public class A { private B b; A(B b) { this.b = b; } }

Graphic User Interfaces pakiet Swing

JAVA Materiały do laboratorium III wersja niezaawansowana Marcin Borkowski WSEiZ czerwiec 2006

Kontenery i komponenty graficzne

Interfejs graczny w Javie.

SWING ZAGADNIENIA: wprowadzenie, kontenery I komponenty, LayoutManager, komponenty tekstowe.

Aplikacje w środowisku Java

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

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

Dokumentacja do API Javy.

Programowanie w języku Java WYKŁAD

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Programowanie Obiektowe Java

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Multimedia JAVA. Historia

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

Aplikacje w środowisku Java

Projektowanie aplikacji internetowych laboratorium

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

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Java: interfejsy i klasy wewnętrzne

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie graficznego interfejsu użytkownika. Wykład 8. Maciej Wołoszyn 10 maja 2006

Programowanie Obiektowe GUI

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Aplikacja wielowątkowa prosty komunikator

Wykład 7: Pakiety i Interfejsy

4. W konstruktorze klasy Grafika wywołaj metodę określającą rozmiary ramki oraz ustaw kolor tła metodą setbackground():

Java Podstawy. Michał Bereta

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

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

Programowanie graficznych interfejsów uŝytkownika

Programowanie obiektowe

Programowanie Obiektowe Java

Języki i metody programowania Java Lab2 podejście obiektowe

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Programowanie obiektowe

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

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

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

Programowanie w Javie Wykład 6 Okienka w Javie (AWT)

Wykład 4_1. Interaktywne aplety obsługa zdarzeń, uruchamianie apletu przez przeglądarkę lub maszynę wirtualną Javy.

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

Podstawy Języka Java

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

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

Programowanie obiektowe

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

Programowanie obiektowe

Wykład 5 Okna MDI i SDI, dziedziczenie

Podstawy i języki programowania

Budowa aplikacji wielowarstwowych. Obsługa zdarzeń

Polimorfizm, metody wirtualne i klasy abstrakcyjne

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Wykład 8: Obsługa Wyjątków

Operatory. Składnia. Typy proste. Znaki specjalne

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

Java Foundation Clases. Tworzenie graficznych interfejsów użytkownika (GUI) w Javie

Jakarta POI. POIFS obsługa dokumentów OLE 2, HSSF dokumenty w formacie Excel'a, HWPF proste dokumenty w formacie Word 97,

Java jako zdalny interfejs aplikacji Webowych aplety

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Tworzymy projekt File->New Project->Java Application, przy czym tym razem odznaczamy create main class

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

Zaawansowane aplikacje WWW - laboratorium

Transkrypt:

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

Obsługa zdarzeń 1. Definicja i idea Każda z aplikacji zmienia swój stan (reaguje) pod wpływem zdarzeń. Mogą to być zdarzenia generowane przez urządzenia wejściowe (mysz, klawiatura), jak również poszczególne składniki programu (okna, timer y itp.), czy wreszcie elementy systemu operacyjnego, pod kontrolną którego pracuje. Od programisty zależy czy i w jaki sposób, poszczególne zdarzenia zostaną obsłużone. Aby korzystać z obsługi zdarzeń, należy zaimportować pakiet awt.: import.java.awt.*; import.java.awt.event.*; Istnieją dwa modele obsługi zdarzeń. Starszy (tzw. tradycyjny), który obecnie wychodzi już z użycia polega na dziedziczeniu. Oznacza to, że zdarzenie jest obsługiwane przez metodę action (zdarzenia generowane przez użytkownika) lub handleevent (zdarzenia generowane przez komponenty graficzne). Może także zostać przekazane do klasy nadrzędnej (nadklasy). Obecnie w użyciu jest nowy model obsługi zdarzeń, oparty na tzw. delegacji (model delegacyjny). Polega on na tym, że do obsługi zdarzenia mogą być delegowane dowolne obiekty, które implementują odpowiedni interfejs nasłuchujący (tzw. zarządca zdarzeń). W tabeli poniżej znajduję się zestawienie poszczególnych interfejsów zarządzających zdarzeniami. Nazwa interfejsu ActionListener Opis obsługuje zdarzenia generowane przez użytkownika na rzecz danego składnika interfejsu (np. kliknięcie przycisku) AdjustmentListener obsługuje zdarzenie jako zmianę stanu składnika (np. przesuwanie suwaka w polu tekstowym) FocusListener obsługuje zdarzenie od przejścia składnika w stan nieaktywny ItemListener obsługuje zdarzenie od np. zaznaczenia pola wyboru KeyListener obsługuje zdarzenie np. od wpisywania tekstu z klawiatury MouseListener obsługuje zdarzenie od naciśnięcia klawiszy myszy MouseMotionListener obsługuje zdarzenie od przesuwania wskaźnika myszy nad danym składnikiem WindowListener obsługuje zdarzenie od okna np. minimalizacja, maksymalizacja, przesunięcie, zamknięcie 2

2. Przykład obsługi zdarzenia - obsługa myszy Jeżeli chcemy implementować delegacyjną metodę obsługi zdarzeń, musimy na początek zadeklarować klasę. Będzie ona przeznaczona do obsługi określonego zdarzenia: Class ObslugaMyszy implements MouseListener, MouseMotionListener { public void mouseclicked (MouseEvent evt) { public void mousedragged (MouseEvent evt) { public void mouseentered (MouseEvent evt) { public void mouseexited (MouseEvent evt) { public void mousemoved (MouseEvent evt) { public void mousepressed (MouseEvent evt) { public void mousereleased (MouseEvent evt) { Jeśli zamierzamy użyć funkcji obsługi zdarzeń, więcej niż jednej kategorii (np. tylko funkcji mousepressed (z klasy MouseListener) oraz mousedragged ( z klasy MouseMotionListener)) wymagane jest, aby deklarować pozostałe (nawet te, których nie zamierzamy używać - mousemoved ) funkcje w wykorzystywanej klasie nasłuchującej (w tym przypadku jest to klasa MouseMotionListener ) Kolejną czynnością jaką wykonamy, będzie zarejestrowanie (przypisanie) klasy nasłuchującej, dla danego obiektu: //tworzymy nową instancję klasy ObslugaMyszy ObslugaMyszy om = new ObslugaMyszy (); //przypisanie dla interfejsów MouseListener addmouselistener (ObslugaMyszy); // przypisanie dla interfejsów MouseMotionListener addmousemotionlistener (ObslugaMyszy); Ostatnim krokiem, jest zaimplementowanie metody obsługi zdarzenia. public void mousedragged (MouseEvent evt) { int x = evt.getx(); int y = evt.gety(); g.drawline(xold, yold, x, y); xold = x; yold = y; W powyższym przykładzie, zdarzeniu mousedragged (przeciągnięcie wskaźnika myszy) przypisaliśmy funkcję rysowania linii. 3

Listing 10) Prezentacja obsługi myszy: public class ObslugaMyszy implements MouseListener, MouseMotionListener { private MojPanel mp; public ObslugaMyszy(MojPanel mp) { this.mp = mp; public void mouseclicked(mouseevent evt) { int button = evt.getbutton(); String tekst; switch(button){ case MouseEvent.BUTTON1 : tekst = "Przycisk 1, "; break; case MouseEvent.BUTTON2 : tekst = "Przycisk 2, "; break; case MouseEvent.BUTTON3 : tekst = "Przycisk 3, "; break; default: tekst = "Przycisk nieznany, "; tekst += "wspołrzędne: x = " + evt.getx() + ", y = " + evt.gety(); mp.settekst(tekst); mp.repaint(); public void mousedragged(mouseevent evt) { public void mouseentered(mouseevent evt) { public void mouseexited(mouseevent evt) { public void mousemoved(mouseevent evt) { public void mousepressed(mouseevent evt) { public void mousereleased(mouseevent evt) { public class MojPanel extends JComponent { private String tekst; private ObslugaMyszy om; public MojPanel() { setpreferredsize(new Dimension(300,300)); tekst = ""; om = new ObslugaMyszy(this); addmouselistener(om); addmousemotionlistener(om); repaint(); public void settekst(string tekst) { this.tekst = tekst; 4

public void paintcomponent(graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setcolor(color.red); g2.drawstring(tekst, 20, 20); public class Listing10 extends JApplet { private MojPanel mp; public Listing10(){ mp = new MojPanel(); setlayout(new BorderLayout()); add(mp, BorderLayout.CENTER); public static void main(string[] args) { JFrame window = new JFrame(); window.setdefaultcloseoperation(jframe.exit_on_close); window.settitle("listing10"); window.setcontentpane(new Listing10()); window.pack(); window.setlocationrelativeto(null); window.setvisible(true); Wynik działania apletu: 3. Przykład obsługi zdarzenia - obsługa klawiatury Jeżeli chcemy implementować delegacyjną metodę obsługi zdarzeń, musimy na początek zadeklarować klasę. Będzie ona przeznaczona do obsługi określonego zdarzenia: Class ObslugaKlawiatury implements KeyListener { public void keypressed (KeyEvent evt) { public void keyreleased (KeyEvent evt) { public void keytyped (KeyEvent evt) { 5

Listing 11) Prezentacja obsługi klawiatury: public class ObslugaKlawiatury implements KeyListener { private MojPanel mp; public ObslugaKlawiatury(MojPanel mp){ this.mp = mp; public void keypressed(keyevent evt) { String tekst = mp.gettekst(); tekst += evt.getkeychar(); mp.settekst(tekst); mp.repaint(); public void keyreleased(keyevent evt) { public void keytyped(keyevent evt) { public class MojPanel extends JComponent { private JTextField typingarea; private String tekst; private ObslugaKlawiatury ok; public MojPanel() { setpreferredsize(new Dimension(300,300)); tekst = ""; ok = new ObslugaKlawiatury(this); typingarea = new JTextField(20); typingarea.addkeylistener(ok); add(typingarea); repaint(); public String gettekst(){ return tekst; public void settekst(string tekst) { this.tekst = tekst; public void paintcomponent(graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setcolor(color.red); g2.drawstring(tekst, 20, 20); 6

public class Listing11 extends JApplet { private MojPanel mp; public Listing11(){ mp = new MojPanel(); setlayout(new BorderLayout()); add(mp, BorderLayout.CENTER); public static void main(string[] args) { JFrame window = new JFrame(); window.setdefaultcloseoperation(jframe.exit_on_close); window.settitle("listing11"); window.setcontentpane(new Listing11()); window.pack(); window.setlocationrelativeto(null); window.setvisible(true); Wynik działania apletu: 4. Inne rodzaje zdarzeń Oprócz klawiatury i myszy, zdarzenia mogą generować także inne źródła: ActionListener obsługuje zdarzenia generowane przez użytkownika na rzecz danego składnika, AdjustmentListener obsługuje zdarzenia generowane w momencie zmiany stanu składnika (np. uzytkownik przesunie suwak w polu teksotwym), Focuslistener obsługuje zdarzenia generowane w momencie, kiedy takie składniki, jak np. pole tekstowe stają się lub przestają być aktywne, Itemlistener obsługuje zdarzenia generowane wówczas, gdy np. zaznaczane jest pole wyboru, WindowListener obsługuje zdarzenia generowane przez okno (Jwindow, Jframe), takie jak maksymalizacja, minimalizacja, przesunięcie czy zamknięcie okna. 7

Zadanie 1. Napisz proste, puste okno apletu. W tym celu możesz zmodyfikować odpowiednio kod z laboratorium. 2. Stwórz klasę ObslugaMyszy, która implementuje interfejsy MouseListener, MouseMotionListener. 3. Stwórz klasę ObslugaKlawiatury, która implementuje interfejs KeyListener. 4. W applecie wyświetl trzy wiersze napisów: współrzędne myszy: x = 0, y = 0 ilość kliknięć myszy: 0 ilość kliknięć klawiszy: 0 5. W klasie apletu dodaj pole JTextField. W konstruktorze apletu dodaj do niego obsługę zdarzeń, utworzoną w klasie ObslugaKlawiatury. Dodaj ten JTextField do appletu. 6. W konstruktorze apletu dodaj obsługę zdarzeń myszy, utworzoną w klasie ObslugaMyszy. 7. W klasie ObslugaMyszy w metodzie mousemoved napisz kod aktualizujący współrzędne myszy (podczas jej przesuwania). 8. W klasie ObslugaMyszy w metodzie mouseclicked napisz kod aktualizujący ilość kliknięć klawiszy myszy. 9. W klasie ObslugaKlawiatury w metodzie keypressed napisz kod aktualizujący ilość kliknięć klawiszy klawiatury. 10. Poruszenie myszą oraz kliknięcie przycisku myszy bądź klawiatury ma aktualizować wyświetlane informacje z punktu 4. 11. Napisz klasę wyjątków WyjatekSumaKlikniec. 12. W klasie apletu w metodzie paint() dodaj obsługę utworzonego wyjątku. W sekcji try gdy suma kliknięć przekroczy liczbę 10 ma wyrzucać nowo utworzony wyjątek. Sekcja catch ma zerować oba liczniki kliknięć. Sekcja finally ma aktualizować/wyświetlać napisy utworzone w punkcie 4. 8