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

Podobne dokumenty
Java Swing. Tomasz Mularczyk Luty 2005

JAVA programowanie GUI (AWT i Swing)

Programowanie obiektowe

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

SWING. dr Jarosław Skaruz

Programowanie zdarzeniowe

Java - interfejs graficzny

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

Graphic User Interfaces pakiet Swing

Tworzenie i obsługa graficznego interfejsu uŝytkownika

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

Programowanie graficznych interfejsów użytkownika

Podstawowe informacje o apletach

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

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

Tworzenie elementów graficznych

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

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

Multimedia JAVA. Historia

Operatory. Składnia. Typy proste. Znaki specjalne

Obsługa zdarzeń. Wykład 4

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

GUI - projektowanie interfejsów cz. II

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

Architektura interfejsu użytkownika

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

Programowanie obiektowe

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

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

Wykład 12: Obsługa Zdarzeń

Języki Programowania II Wykład 7. Java Swing

Programowanie Obiektowe GUI

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

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

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

PROGRAMOWANIE APLIKACJI MULTIMEDIALNYCH

Podstawy Języka Java

Dokumentacja do API Javy.

Programowanie obiektowe

Programowanie zdarzeniowe

Java biblioteka Swing

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

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

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

Programowanie obiektowe

Programowanie obiektowe

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

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku.

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

Programowanie w języku Java WYKŁAD

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Wzorce projektowe cz. II. Wzorce projektowe cz. II 1/35

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

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

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

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

Temat 4. Storyboard i element interfejsu użytkownika Gra w kulki- część 1

Swing Application Framework czyli tam i z powrotem. Copyright Piotr Kochański & Erudis,

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

Bartosz Jachnik - Kino

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

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

Tworzenie aplikacji Web Alicja Zwiewka. Page 1

Kontenery i komponenty graficzne

MVVM Light Toolkit. Julita Borkowska

Programowanie obiektowe

Programowanie aplikacji na iphone. Wstęp do platformy ios. Łukasz Zieliński

Podstawy Swing. Tomasz Borzyszkowski

JavaFX. Zaawansowane technologie Javy 2019

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

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Programowanie Obiektowe Java

Programowanie obiektowe zastosowanie języka Java SE

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

1. Język JAVA. 1. Pierwszy program. 2. Kalkulator. 3. Klasy. 4. Dziedziczenie

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Aplikacje w środowisku Java

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

Klasy abstrakcyjne i interfejsy

Scenariusz Lekcji. Część organizacyjna:

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Builder (budowniczy) Cel: Przykład:

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

Aplikacje w środowisku Java

Aplikacja wielowątkowa prosty komunikator

Programowanie dla iphone projektowanie interfejsu użytkownika

LABORATORIUM 7 Cel: 1_1

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;

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

JAX-RS czyli REST w Javie. Adam Kędziora

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Java jako zdalny interfejs aplikacji Webowych aplety

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

Interfejsy i klasy wewnętrzne

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Wywoływanie metod zdalnych

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

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie w języku Java

Transkrypt:

[1] JAVA programowanie GUI (AWT i Swing)

[2] Wprowadzenie Pierwotnym GUI dla Javy był AWT (Abstract Window Toolkit) wg legendy powstał w miesiąc... Swing dodano dopiero w wersji Javy 1.2 (przełom 1997/98) Dlaczego skonstruowano kolejny sposób tworzenia interfejsów?

[3] Dlaczego nie AWT? Główny powód: niezadowolenie osób tworzących w Javie z istniejącego rozwiązania Wygląd interfejsów stworzonych przy pomocy AWT zależało od systemu operacyjnego AWT oferowało słabe wsparcie dla rysowania na ekranie oraz nie zapewniało kompatybilności operacji Drag and Drop pod kontrolą różnych systemów operacyjnych

[4] AWT a Swing AWT: Wygląd kontrolek specyficzny dla każdego systemu operacyjnego Swing: Wygląd kontrolek niezależny od systemu operacyjnego Schematy wyglądu (look and feel) Rozbudowane wsparcie dla rysowania 2D

[5] AWT a Swing AWT: Korzysta z wywołań funkcji systemowych przy tworzeniu i zarządzaniu wyglądem aplikacji Generalnie szybki, choć szybkość działania zależy od systemu operacyjnego Swing: W całości napisany w Javie Nieco wolniejszy, ale mniejsze różnice w prędkości pomiędzy platformami

[6] AWT i Swing AWT i Swing zawierają 2 podstawowe klasy: Component : metody dostępu do komponentów graficznych oraz metody do zmiany ich właściwości, Container : podklasa Component dostarczająca tzw. pojemniki, czyli obiekty grupujące

[7]

[8]

[9]

[10]

[11] Rozmieszczanie elementów na ekranie Kontrolą rozmieszczenia obiektów na ekranie zajmuje się Container. Do dyspozycji jest kilka klas. 1. BorderLayout (domyślny) 2. FlowLayout 3. GridLayout 4. GridBagLayout 5. null 6. BoxLayout

[12] Rozmieszczanie elementów na ekranie import java.awt.*; import java.applet.applet; public class buttondir extends Applet { public void init() { setlayout(new BorderLayout()); add(new Button("North"), BorderLayout.NORTH); add(new Button("South"), BorderLayout.SOUTH); add(new Button("East"), BorderLayout.EAST); add(new Button("West"), BorderLayout.WEST); add(new Button("Center"), BorderLayout.CENTER); } }

[13] Rozmieszczanie elementów na ekranie import java.awt.*; import java.applet.applet; public class mybuttons extends Applet { Button button1, button2, button3; public void init() { button1 = new Button("Ok"); button2 = new Button("Open"); button3 = new Button("Close"); add(button1); add(button2); add(button3); } }

[14] Rozmieszczanie elementów na ekranie import java.awt.*; import java.applet.applet; public class ButtonGrid extends Applet { public void init() { setlayout(new GridLayout(3,2)); add(new Button("1")); add(new Button("2")); add(new Button("3")); add(new Button("4")); add(new Button("5")); add(new Button("6")); } }

[15] Rozmieszczanie elementów na ekranie private javax.swing.jlabel getivjjlabel(){ if(ivjjlabel == null) { ivjjlabel = new javax.swing.jlabel(); ivjjlabel.setbounds(59, 10, 38, 15); ivjjlabel.settext("jlabel"); } return ivjjlabel; }

[16] Model View - Controller INPUT PROCESSING OUTPUT Podejście klasyczne CONTROLLER MODEL VIEW Podejście MVC

[17] Dlaczego MVC? Podejście po raz pierwszy wykorzystano w Smalltalku 80 Kontrolery, model i widoki traktowane jako oddzielne elementy Zmiany modelu natychmiast odzwierciedlane w widokach

[18] Model View - Controller VIEW CONTROLLER VIEW CONTROLLER MODEL VIEW CONTROLLER VIEW

[19] Założenia MVC... Wszystkie komponenty w systemie muszą dać się określić jako kontroler, model, widok bądź część któregoś z nich Połączenie model <-> widok jest realizowane dynamicznie w czasie działania programu, a nie w czasie kompilacji Jeżeli zaprojektujemy w MVC każdy komponent, to łatwe będzie ich łączenie w spójny projekt

[20] Założenia MVC... Usuwanie bądź przebudowa komponentu nie pociąga za sobą potrzeby ingerencji w cały system Model nie wie, jakie są jego kontrolery, nie zna także korzystających z niego widoków sam system zajmuje się ich spójnym połączeniem Kontrolery i Widoki znają skojarzony z nimi Model

[21] Przykład zastosowania MVC Gra komputerowa 3D shoot 'em up AKCJA: RUCH AKCJA: STRZAŁ AKCJA: OTWIERANIE DRZWI MODEL(e) ŚWIATA, OBIEKTÓW, POSTACI WIDOK: FPP WIDOK: Z GÓRY WIDOK: OD STRONY PRZECIWNIKA

[22] Java a MVC... Java oferuje wsparcie dla MVC poprzez dwie klasy: Obserwator (Observer) obiekt, który chce być powiadamiany o zmianach w innym obiekcie Obserwowany (Observable) każdy obiekt, którego zmiana stanu może zainteresować inny obiekt

[23] Swing a MVC observable MODEL CONTROLLER VIEW GUI observer

[24] Przykład (JButton) Model przechowuje stan, pozwala na jego modyfikację i odczytywanie. Dodatkowo pozwala dodawać/usuwać słuchaczy(listeners). Widok i kontroler zajmują się wyświetlaniem stanu i przycisku na ekranie. Tutaj także pamiętamy, w którym miejscu na ekranie znajduje się przycisk. Ta część zajmuje się również obsługą zdarzeń AWT.

[25] Zdarzenia W modelu, z którego korzysta Swing, akcje podejmowane są w odpowiedzi na zajście konkretnych zdarzeń. Aby powiązać zdarzenie z określoną akcją, każdej kontrolce musimy przyporządkować specjalną klasę, która będzie reagowała na zajście tego zdarzenia. Tę klasę nazywamy słuchaczem.

[26] Zdarzenia W modelu tym występuje strona wyzwalająca (trigger) zdarzenie i nasłuchująca (listener), czy zdarzenie zaszło. Aby móc nasłuchiwać, trzeba się najpierw zarejestrować u wyzwalającego i tym samym wyrazić zainteresowanie danym zestawem zdarzeń. Wówczas wyzwalający w razie zajścia zdarzenia będzie mógł wywołać na rzecz nasłuchującego metodę odpowiadającą zdarzeniu. Zestaw metod opowiadających zdarzeniom jest określony przez interfejs. Gdy korzysta się z wbudowanego systemu zdarzeń, wystarczy napisać stronę nasłuchującą, zwaną nasłuchiwaczem. Jest to klasa implementująca interfejs przeznaczony dla danego zestawu zdarzeń.

[27] Zdarzenia

[28] Zdarzenia import java.awt.event.actionlistener; import java.awt.event.actionevent; Większość komponentów reaguje na działania użytkownika wyzwoleniem zdarzenia akcji. Zdarzenie akcji jest reprezentowane przez obiekt ActionEvent, od którego można pozyskać informację na temat zdarzenia. Interfejs odpowiadający zdarzeniom akcji to ActionListener z metodą actionperformed. Aby obsługiwać działania użytkownika należy na komponencie zarejestrować metodą addactionlistener nasłuchiwacza, czyli instancję implementującą ten interfejs.

[29] Zdarzenia class ObslugaPrzycisku implements ActionListener { OblsugaPrzycisku() { JButton przycisk = new JButton("Naciśnij mnie"); przycisk.addactionlistener(this); } public void actionperformed(actionevent e) { System.out.println("I po co naciskasz?"); } }

[30] Zdarzenia - mysz Obsługa myszy opiera się na standardowym modelu zdarzeń. Interakcje użytkownika z myszą podzielono między kilka interfejsów: 1. podstawowy MouseListener 2. śledzący ruch wskaźnika MouseMotionListener 3. obejmujący oba powyższe MouseInputListener 4. śledzący obroty kulki myszy MouseWheelListener

[31] Zdarzenia - mysz Podstawowy interfejs import java.awt.event.mouselistener; import java.awt.event.mouseevent; MouseListener dostarcza następujące metody: * kliknięcie myszą void mouseclicked(mouseevent e) * naciśnięcie przycisku myszy void mousepressed(mouseevent e) * zwolnienie przycisku myszy void mousereleased(mouseevent e) * wejście myszy w obszar śledzenia void mouseentered(mouseevent e) * wyjście myszy z obszaru śledzenia void mouseexited(mouseevent e)

[32] Zdarzenia - mysz class ObsługaMyszy impelements MouseListener { ObsługaMyszy() { addmouselistener(this); // rejestracja zainteresowania zdarzeniami } } public void mouseclicked(mouseevent e) { System.out.println("Kliknięto " + e.getclickcount() + "razy"); System.out.println("w punkcie: (" + e.getx() + "," + e.gety() + ")"); }

[33] Wtyczki GUI (look and feel) Schematy wyglądu dostarczane wraz ze Swingiem: GTKLookAndFeel (Linux z GTK) MetalLookAndFeel (typowy dla Javy) MotifLookAndFeel WindowsLookAndFeel (typowy dla Windows) DefaultLookAndFeel

Wybór look and feel Jeśli aplikacja nie określi swojego LookAndFeel, zostanie użyty domyślny LookAndFeel Javy. [34] Wybór lookandfeel powinien wystąpić jako pierwszy w programie. Aby aplikacja przypominała wyglądem pozostałe, należy wybrać LookAndFeel zależny od platformy. Metoda wyboru rzuca różne wyjątki, którymi trzeba się zająć: try { UIManager.setLookAndFeel(UIManager.getSystemLookAnd FeelClassName()); } catch (Exception e) { } System.err.println("Nie można wybrać LookAndFeel");

[35] Wybór look and feel UIManager.setLookAndFeel( "com.sun.java.swing.plaf.gtk.gtklookandfeel"); "com.sun.java.swing.plaf.gtk.gtklookandfeel" "javax.swing.plaf.metal.metallookandfeel" "com.sun.java.swing.plaf.windows.windowslookandfeel" "com.sun.java.swing.plaf.motif.motiflookandfeel"

[36] Jigloo

[37] JForm Designer

[38] Podsumowanie Swing rozszerza AWT i przerasta go w wielu względach Wygląd aplikacji napisanych przy użyciu Swinga jest taki, jakiego sobie zażyczymy na każdej platformie Swing został zaprojektowany z uwzględnieniem architektury Model-View-Controller Dzięki zastosowaniu anonimowych słuchaczy pisanie kodu obsługującego zdarzenia jest szybkie