Programowanie w języku Java

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

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

Tworzenie elementów graficznych

Programowanie obiektowe

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

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Dokumentacja do API Javy.

Język Java. Rysowanie GUI Określanie wyglądu komponentów

Programowanie obiektowe

Programowanie obiektowe

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

Programowane refleksyjne i serializacja

Enkapsulacja, dziedziczenie, polimorfizm

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Bezstanowe komponenty sesyjne i zdarzenia zwrotne

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

Wzorzec projektowy Obserwator idiomatyczne rozwiązanie

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

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

Aplikacja wielowątkowa prosty komunikator

Programowanie obiektowe

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

Technologia Programowania 2016/2017 Wykład 6

Kontynuacja wprowadzenia do SWING. Przykłady implementacji wybranych komponentów

Programowanie komponentowe

DOSTĘP DO METOD I ZMIENNYCH. Dostęp do zmiennych (na podstawie:l.lemay,r.cadenhead,java 2 dla każdego, Helion 2001)

Programowanie obiektowe

Systemy operacyjne na platformach mobilnych

Java. Programowanie Obiektowe Mateusz Cicheński

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

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Strumienie i serializacja

Podstawy Programowania

DOSTĘP DO METOD I ZMIENNYCH, TABLICE. Dostęp do zmiennych (na podstawie:l.lemay,r.cadenhead,java 2 dla kaŝdego, Helion 2001)

Programowanie obiektowe

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Podstawowe informacje o apletach

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

Remote Method Invocation 17 listopada 2010

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

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

Programowanie obiektowe

Aplikacja wielow tkowa prosty komunikator

Java: interfejsy i klasy wewnętrzne

Podejście obiektowe do budowy systemów rozproszonych

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz

Operatory. Składnia. Typy proste. Znaki specjalne

Grafika i komunikacja człowiek komputer Laboratorium. Część 3: Tekst, czcionki, kolory

Java Beans 1 Wprowadzenie

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

Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]

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

JAVA : SWING, DOKUMENTY I DRUKOWANIE 1. WSTĘP

Aplikacje RMI

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

Przypomnienie o klasach i obiektach

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

Multimedia JAVA. Historia

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ć

Programowanie obiektowe

Platformy Programistyczne Podstawy języka Java

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

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

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

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

Tworzenie i obsługa graficznego interfejsu uŝytkownika

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

Kontenery i komponenty graficzne

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

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

Wykład 11: Programowanie Apletów

Metody dostępu do danych

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

Serwery aplikacji. dr Radosław Matusik. radmat

Programowanie obiektowe

Współbieżność w środowisku Java

Builder (budowniczy) Cel: Przykład:

Bazy danych tworzenie aplikacji bazodanowych ORM / JPA

Programowanie w Internecie. Java

Komponenty sterowane komunikatami

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Wstęp do ruby dla programistów javy

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

Klasy i obiekty cz II

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

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Programowanie obiektowe

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

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Java jako zdalny interfejs aplikacji Webowych aplety

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

Programowanie graficznych interfejsów użytkownika

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Programowanie obiektowe

Podstawy programowania obiektowego

Transkrypt:

Programowanie w języku Java Wykład 7: JavaBeans Programowanie komponentowe Klasy uniwersalne komponenty Wymagania: Standardowy dostęp do pól Standardowy mechanizm wywoływania metod Komponent: Zestaw własności Zestaw metod operujących na własnościach Obsługa zdarzeń Trwały Programowanie w języku Java 2 1

Komponenty w Javie Java.beans Pakiet zawierający API zgodny z architekturą JavaBeans NetBean BUI Builder Środowisko graficzne Wspomaga definiowanie komponentów Programowanie w języku Java 3 Komponenty JavaBean Dowolna klasa Javy zawierająca metody: getxxxx i setxxxx - dla każdej własności Xxxx, lub isxxxx i setxxxx - dla własności Xxxx typu boolean addyyyy i removeyyyy dla obsługi zdarzeń Yyyy brak publicznych pól tylko konstruktor domyślny (bezparametrowy) Zalety: programowanie komponentowe łatwo wydobywać informacje z dowolnego Beana Programowanie w języku Java 4 2

Przykład (1) public class BangBean extends JPanel implements Serializable { protected int xm, ym; protected int csize = 20; protected String text = "Bang!"; protected int fontsize = 48; protected Color tcolor = Color.red; protected ActionListener actionlistener; public BangBean() { addmouselistener(new ML()); addmousemotionlistener(new MML()); public int getcirclesize() { return csize; public void setcirclesize(int newsize) { csize = newsize; public String getbangtext() { return text; public void setbangtext(string newtext) { text = newtext; public int getfontsize() { return fontsize; public void setfontsize(int newsize) { fontsize = newsize; public Color gettextcolor() { return tcolor; public void settextcolor(color newcolor) { tcolor = newcolor; public void paintcomponent(graphics g) { super.paintcomponent(g); g.setcolor(color.black); g.drawoval(xm - csize/2, ym - csize/2, csize, csize); Programowanie w języku Java 5 Przykład (2) public void addactionlistener ( ActionListener l) throws TooManyListenersException { if(actionlistener!= null) throw new TooManyListenersException(); actionlistener = l; public void removeactionlistener(actionlistener l) { actionlistener = null; class MML extends MouseMotionAdapter { public void mousemoved(mouseevent e) { xm = e.getx(); ym = e.gety(); repaint(); class ML extends MouseAdapter { public void mousepressed(mouseevent e) { Graphics g = getgraphics(); g.setcolor(tcolor); g.setfont(new Font( "TimesRoman", Font.BOLD, fontsize)); int width = g.getfontmetrics().stringwidth(text); g.drawstring(text, (getsize().width - width) /2, getsize().height/2); g.dispose(); if(actionlistener!= null) actionlistener.actionperformed( new ActionEvent(BangBean.this, ActionEvent.ACTION_PERFORMED, null)); public Dimension getpreferredsize() { return new Dimension(200, 200); Programowanie w języku Java 6 3

Własności Simple Indexed Bound typu prostego, wartość niezależna od innych własności Zakres wartości Zmiana wartości powoduje powiadomienie innego komponentu Constrained Zmiana dozwolona za zezwoleniem innego komponentu Programowanie w języku Java 7 Proste komponenty public class MyBean { public MyBean() { /** * Holds value of property title. */ private String title; /** * Getter for property title. * @return Value of property title. */ public String gettitle() { return this.title; /** * Setter for property title. * @param title New value of property title. */ public void settitle(string title) { this.title = title; import java.awt.graphics; import java.io.serializable; import javax.swing.jcomponent; public class MyBean extends JComponent implements Serializable { private String title; public String gettitle() { return this.title; public void settitle( String title ) { this.title = title; protected void paintcomponent( Graphics g ){ g.setcolor( getforeground() ); int height = g.getfontmetrics().getheight(); if ( this.title!= null ) g.drawstring(this.title, 0, height ); Komponent graficzny Komponent zwykły Programowanie w języku Java 8 4

Dostęp do własności Read/Write Metody setwłasność() i getwłasność() Read only Tylko metoda getwłasność() Write only Tylko metoda setwłasność() Programowanie w języku Java 9 Własności powiązane Gdy wartość własności zostaje zmieniona wysyłane jest powiadomienie PropertyChangeEvent do nasłuchujących komponentów Metoda propertychange() wysyła w/w powiadomienie PropertyChangeSupport klasa zwiera metody umożliwiające rejestrację nasłuchujących komponentów PropertyChangeListener Komponent nasłuchujący zmiany własności Programowanie w języku Java 10 5

import java.awt.graphics; import java.beans.propertychangelistener; import java.beans.propertychangesupport; import java.io.serializable; import javax.swing.jcomponent; public class MyBean extends JComponent implements Serializable{ private String title; private String[ ] lines = new String[10]; private final PropertyChangeSupport pcs = new PropertyChangeSupport( this ); public String gettitle() { return this.title; public void settitle( String title ) { String old = this.title; this.title = title; this.pcs.firepropertychange( "title", old, title ); public String[ ] getlines() { return this.lines.clone(); public String getlines( int index ) { return this.lines[index]; public void setlines( String[ ] lines ) { String[ ] old = this.lines; this.lines = lines; this.pcs.firepropertychange( "lines", old, lines Programowanie ); w języku Java 11 public void setlines( int index, String line ) { String old = this.lines[index]; this.lines[index] = line; this.pcs.fireindexedpropertychange( "lines", index, old, lines ); public void addpropertychangelistener( PropertyChangeListener listener ) { this.pcs.addpropertychangelistener( listener ); public void removepropertychangelistener( PropertyChangeListener listener ) { this.pcs.removepropertychangelistener( listener ); protected void paintcomponent( Graphics g ) { g.setcolor( getforeground() ); int height = g.getfontmetrics().getheight(); paintstring( g, this.title, height ); if ( this.lines!= null ) { int step = height; for ( String line : this.lines ) paintstring( g, line, height += step ); private void paintstring( Graphics g, String str, int height ) { if ( str!= null ) g.drawstring( str, 0, height ); Własności ograniczone Podobnie jak własności powiązane ale komponent nasłuchująca jest typu VetoableChangeListener Komponent może zawetować zmianę zgłaszając wyjątek PropertyVetoException Implementacja metody setxxx: Zapamiętanie starej wartości Powiadomienie komponentu nasłuchującego Jeśli komponent zawetował zmianę to przywrócenie starej wartości Programowanie w języku Java 12 6

import java.io.serializable; public void setlines( int index, String line ) throws import java.beans.propertychangelistener; PropertyVetoException { import java.beans.propertychangesupport; String old = this.lines[index]; import java.beans.propertyvetoexception; import java.beans.vetoablechangelistener; import java.beans.vetoablechangesupport; import java.awt.graphics; import javax.swing.jcomponent; this.vcs.firevetoablechange( "lines", old, line ); this.lines[index] = line; this.pcs.fireindexedpropertychange( "lines", index, old, line ); public void addpropertychangelistener( PropertyChangeListener public class MyBean extends JComponent listener ) { implements Serializable{ private String title; private String[] lines = new String[10]; this.pcs.addpropertychangelistener( listener ); public void removepropertychangelistener( PropertyChangeListener private final PropertyChangeSupport pcs = new listener ) { PropertyChangeSupport( this ); this.pcs.removepropertychangelistener( listener ); private final VetoableChangeSupport vcs = new VetoableChangeSupport( this ); public void addvetoablechangelistener( public String gettitle() { return this.title; VetoableChangeListener listener ) { public void settitle( String title ) throws this.vcs.addvetoablechangelistener( listener ); PropertyVetoException { String old = this.title; this.vcs.firevetoablechange( "title", old, title ); public void removevetoablechangelistener( VetoableChangeListener listener ) { this.title = title; this.vcs.removevetoablechangelistener( listener ); this.pcs.firepropertychange( "title", old, title ); protected void paintcomponent( Graphics g ) { public String[] getlines() { return this.lines.clone(); g.setcolor( getforeground() ); public String getlines( int index ) { return this.lines[index]; int height = g.getfontmetrics().getheight(); paintstring( g, this.title, height ); if ( this.lines!= null ) { public void setlines( String[ ] lines ) throws int step = height; PropertyVetoException { for ( String line : this.lines ) String[] old = this.lines; paintstring( g, line, height += step ); this.vcs.firevetoablechange( "lines", old, lines ); this.lines = lines; private void paintstring( Graphics g, String str, int height ) { this.pcs.firepropertychange( "lines", old, lines ); if ( str!= null ) g.drawstring( str, 0, height ); Programowanie w języku Java 13 Własności indeksowane Dostęp do elementów: public PropertyElement getpropertyname(int index) public void setpropertyname(int index, PropertyElement element) Dostęp do całej tablicy: public PropertyElement[] getpropertyname() public void setpropertyname(propertyelement element[]) Programowanie w języku Java 14 7

Komunikacja pomiędzy komponentami Nadajnik: wysyła zdarzenie public void add<eventlistenertype>(<eventlistenertype> a) public void remove<eventlistenertype>(<eventlistenertype> a) Zdarzenie: zawiera informację ActionEvent Komponent nasłuchujący: odbiera zdarzenie <EventListenerType> Programowanie w języku Java 15 Trwałość komponentów Komponenty są serializowalne Można kontrolować serializację Trwałość długoterminowa Serializacja do formatu XML XMLEncoder, XMLDecoder Programowanie w języku Java 16 8

Przykład komponentu w XMLu <?xml version="1.0" encoding="utf-8"?> <java> <object class="javax.swing.jframe"> <void method="add"> <object class="java.awt.borderlayout" field="center"/> <object class="simplebean"/> </void> <void property="defaultcloseoperation"> <object class="javax.swing.windowconstants" field="dispose_on_close"/> </void> <void method="pack"/> <void property="visible"> <boolean>true</boolean> </void> </object> </java> Programowanie w języku Java 17 Introspekcja komponentów BeanInfo Intefejs do implementacji klas zawierających informacje o komponencie (deskryptory) Introspector Klasa do introspekcji getbeaninfo(beanname) Programowanie w języku Java 18 9

Deskryptory komponentów Programowanie w języku Java 19 Koniec Programowanie w języku Java 20 10