Programowanie sieciowe

Podobne dokumenty
Dokumentacja do API Javy.

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

Multimedia JAVA. Historia

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

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

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

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

Programowanie obiektowe

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

Programowanie obiektowe

Programowanie obiektowe

Dziedziczenie. dr Jarosław Skaruz

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

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

Programowanie obiektowe

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

Programowanie obiektowe

Wykład 7: Pakiety i Interfejsy

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Programowanie graficznych interfejsów użytkownika

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

Tworzenie elementów graficznych

Kurs WWW. Paweł Rajba.

Programowanie obiektowe

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Podstawy Języka Java

Aplikacje w środowisku Java

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

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

Klasy abstrakcyjne, interfejsy i polimorfizm

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

Dziedziczenie. Tomasz Borzyszkowski

Wykład 2: Podstawy Języka

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

Programowanie w Internecie. Java

Programowanie obiektowe

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Programowanie zdarzeniowe

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

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

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Platformy Programistyczne Podstawy języka Java

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Interfejsy i klasy wewnętrzne

Enkapsulacja, dziedziczenie, polimorfizm

1 Atrybuty i metody klasowe

Dziedziczenie jednobazowe, poliformizm

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

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

Wykład 4: Klasy i Metody

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

Klasy cd. Struktury Interfejsy Wyjątki

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

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

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

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

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

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Wykład 6: Dziedziczenie

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Tworzenie i obsługa graficznego interfejsu uŝytkownika

Java - interfejs graficzny

Technologie i usługi internetowe cz. 2

Programowanie obiektowe zastosowanie języka Java SE

Wykład 5 Okna MDI i SDI, dziedziczenie

Platformy Programistyczne Wykład z Javy dla zaawansowanych

Kontenery i komponenty graficzne

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

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

Wykład 8: klasy cz. 4

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

Programowanie w Javie - wykład 3

2. Składnia, środowisko i konwencje w Javie

Kompozycja i dziedziczenie klas

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Aplikacje w środowisku Java

PHP 5 język obiektowy

Podstawy programowania obiektowego

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

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

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Java Język programowania

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

KLASY, INTERFEJSY, ITP

Programowanie 2. Język C++. Wykład 3.

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

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

10. Programowanie obiektowe w PHP5

Klasy abstrakcyjne i interfejsy

Programowanie Obiektowe GUI

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

Polimorfizm. dr Jarosław Skaruz

PODEJŚCIE OBIEKTOWE. Przykład 1 metody i atrybuty statyczne

Definiowanie własnych klas

Transkrypt:

Programowanie sieciowe Wykład 2: Java, cd. mgr inŝ. Paweł Kośla mgr Marcin Raniszewski Łódź, 2009

Plan wykładu Dziedziczenie Rzutowanie Pakiety Modyfikatory dostępu Metody i klasy abstrakcyjne Interfejsy UŜyteczne klasy Wyjątki Aplikacja graficzna Modelowanie okna Obsługa zdarzeń 2

Dziedziczenie UmoŜliwia tworzenie z danej klasy klas pochodnych (podklas). Klasa pochodna dziedziczy pola i metody po klasie bazowej (nadklasie). MoŜna z nich korzystać tak, jakby były zadeklarowane w danej klasie. (ograniczenia poprzez modyfikator dostępu private) Podklasa moŝe dziedziczyć tylko po jednej nadklasie. Klasa pochodna moŝe mieć swoje klasy pochodne w ten sposób powstaje hierarchia klas. KaŜda klasa dziedziczy po klasie Object klasie bazowej wszystkich klas w Javie 3

Dziedziczenie public class KlasaBazowa { public int i; public void wypisz() { System.out.println( Wartosc i: + i); public class Pochodna extends KlasaBazowa { public void metoda() { Pochodna obiekt = new Pochodna (); obiekt.i = 3; obiekt.metoda(); obiekt.wypisz(); // Wartosc i: 3 4

Dziedziczenie Przysłanianie metod pozwala na powtórne deklarowanie w klasie pochodnej tych samych metod co w klasie bazowej. Nie moŝna przysłaniać metod z modyfikatorem final. Nie moŝna zmieniać typu metody statycznej na niestatyczną class Pochodna extends KlasaBazowa { void wypisz() { System.out.println( Metoda wywolana w podklasie ); obiekt.wypisz(); // Metoda wywolana w podklasie 5

Słowa super i this Słowo kluczowe super uŝywane jest przy odwołaniach do metod, konstruktorów i pól przodka (nadklasy) Słowo kluczowe this oznacza obecny obiekt klasy public class Wzor { public int zmienna; Wzór(int i) { zmienna = i; public class Klasa extends Wzor { int a, b = 10; Klasa() { super(7); public void seta(int a) { this.a = a; 6

Rzutowanie Java w razie potrzeby zamieni automatycznie jeden typ danych na inny (przypisanie wartości int do double). Rzutowanie umoŝliwia wskazanie konwersji lub wymuszenie konwersji w miejscu, w którym normalnie by nie nastąpiła. void rzutowanie() { int i = 300; long l = (long)i; long l2 = (long)300; MoŜna rzutować zmienną jak i wartość liczbową. PowyŜsze rzutowanie jest zbyteczne, gdyŝ jest zapewnione automatycznie (typ mniejszy rzutujemy na większy). Java pozwala na rzutowanie kaŝdego typu podstawowego na kaŝdy inny typ podstawowy, oprócz typu logicznego, który w ogóle nie moŝe być rzutowany. 7

Rzutowanie long l = 223372036854775L; int i = (int)l; System.out.println(i); PowyŜszy kod wypisze na standardowe wyjście iterał -622275593. Jeśli nie wpisalibyśmy jawnej konwersji, kompilator zgłosiłby błąd: Type mismatch: cannot convert from long to int. Aby rzutować klasy, potrzebne są specjalne metody, które taką konwersję wykonają (wyjątek stanowi klasa String: klasa Object zawiera metodę tostring(), która umoŝliwia konwersję dowolnej klasy na obiekt typu String). MoŜliwe jest rzutowanie w ramach rodziny typów, czyli typów dziedziczących (moŝna rzutować String na Object (rzutowanie w górę) i Object na String, o ile obiekt jest rzeczywiście typu String (inaczej otrzymamy wyjątek ClassCastException)). 8

Pakiet Pakiety są bibliotekami klas. Klasy kompilowane z deklaracją pakietu package naleŝą do pakietu o nazwie podanej w deklaracji. package dom; Nazwy pakietów tworzone są w sposób odpowiadający hierarchii ścieŝek, w której znajdują się klasy. package dom.kuchnia; class kuchenka { Klasy kompilowane bez nazwy pakietu naleŝą do pakietu domyślnego. Instrukcja package musi być pierwszym elementem programu nie będącym komentarzem. Pakiety pełnią rolę porządkującą względem przestrzeni nazw i chronią przed kolizjami klas. Aby utrzymać porządek Java umieszcza wszystkie plik.class z danego pakietu w jednym katalogu. Zebranie plików pakietu w jednym podkatalogu ułatwia: - tworzenie unikatowych nazw pakietów, - odnajdywanie klas ukrytych w strukturze katalogów. ŚcieŜka dostępu ukryta jest w nazwie pakietu. Pliki z pakietu mojpakiet.graf zostaną umieszczone w katalogu mojpakiet/graf. 9

Pakiet Odwołując się do klas, które znajdują się w innych pakietach trzeba podać ich lokalizację: java.util.date data = new java.util.date(); PoniewaŜ jest to niewygodne, Java umoŝliwia importowanie pojedynczych klas lub całych pakietów. Aby włączyć pakiet do programu piszemy: import java.util.*; Import pojedynczej klasy: import java.util.arraylist; Polecenie import jest odpowiednikiem instrukcji #include z języka C/C++. Kompilator nie zgłosi Ŝadnych zastrzeŝeń, nawet jeśli pakiet zostanie zaimportowany więcej niŝ jeden raz. 10

Modyfikatory dostępu Przy programowaniu obiektowym istotnym zagadnieniem jest oddzielenie rzeczy, które się zmieniają od rzeczy, które pozostają takie same. Postępowanie takie nazywa się hermetyzacją. Język Java dostarcza modyfikatory dostępu, które są uŝyteczne temu zagadnieniu. Dostępne poziomy dostępu to: public, protected, przyjazny, pakietowy(ang. package) (bez określonego słowa kluczowego), private. Modyfikatory dostępu umieszcza się przed definicją składnika klasy. Modyfikator naleŝy ustawić przed kaŝdym składnikiem klasy osobno. Nie obowiązuje tu zapis znany z C++. public class Klasa { public int i; private long l; double d; 11

Modyfikatory dostępu Modyfikator klasa pakiet podklasa wszędzie private + przyjazny + + protected + + public + + + + Klasy nie mogą być ani typu private, ani typu protected (wyjątkiem klasy wewnętrzne). Aby uniemoŝliwić dostęp do danej klasy, naleŝy jej wszystkie konstruktory oraz pola statyczne uczynić prywatnymi (lub zaleŝnie od potrzeby określić dostęp na przyjazny lub chroniony). 12

Metody i klasy abstrakcyjne Metoda abstrakcyjna jest metodą niekompletną zawiera tylko deklarację, nie posiada natomiast ciała. Deklaracja tej metody poprzedzona jest słowem kluczowym abstract. Jeśli klasa posiada co najmniej jedną metodę abstrakcyjną, wówczas staje się klasą abstrakcyjną i jej deklaracja musi być poprzedzona słowem kluczowym abstract. Przykład: abstract class Baza { void metoda() { return; abstract public void metodaabstract(); //brak ciała metody 13

Metody i klasy abstrakcyjne Klasę abstrakcyjną tworzy się, gdy chcemy manipulować zestawem klas pochodnych poprzez wspólny interfejs. Mają one wyraŝać tylko interfejs, a nie określoną implementację. Jeśli dziedziczymy po klasie abstrakcyjnej i chcemy tworzyć obiekty klasy potomnej, wtedy musimy dostarczyć definicje wszystkich metod abstrakcyjnych klasy bazowej Przykład: abstract class Baza { void metoda() { return; public abstract void metodaabstract(); class Jeden extends Baza { public void metodaabstract() { System.out.println( wyswietl tekst ); //wszystkie klasy pochodne musza //mieć taka metodę zdefiniowaną 14

Metody i klasy abstrakcyjne Jeśli nie zdefiniujemy wszystkich metod abstrakcyjnych w klasie pochodnej, nowa klasa stanie się klasą abstrakcyjną i kompilator zmusi nas do uŝycia słowa abstract takŝe w stosunku do niej. Przykład: abstract class Baza { void metoda() { return; public abstract void metodaabstract(); abstract class Dwa extends Baza { void metoda(){ System.out.println( w klasie Dwa ); 15

Metody i klasy abstrakcyjne Nie moŝna utworzyć obiektu dla klasy abstrakcyjnej. MoŜliwe jest zadeklarowanie klasy jako abstrakcyjnej mimo, Ŝe nie posiada Ŝadnych metod abstrakcyjnych. Przydatne jest to, gdy chcemy zapobiec tworzenia obiektów naszej klasy, mimo Ŝe nie ma sensu deklarowania którejkolwiek z metod jako abstrakcyjną. 16

Interfejs Słowo kluczowe interface produkuje klasę całkowicie abstrakcyjną. Klasa ta nie zawiera Ŝadnej implementacji, a jedynie zbiór metod które musi zawierać implementująca go klasa. Interfejsy zawierają tylko publiczne metody abstrakcyjne (niejawne public abstract) oraz tylko statyczne, finalne i publiczne pola (niejawnie public static final) Dzięki interfejsom moŝemy w języku Java wprowadzić mechanizm znany z języka C++ wielokrotnego dziedziczenia. Interfejsy pozwalają ustanowić formę klasy: nazwy metod, listy argumentów oraz typy zwracane jednak bez ciał metod. Interfejs mówi nam: oto jak będą wyglądać wszystkie klasy implementujące mnie. Przykład: interface Instrument { int i = 5; //automatycznie public static i final String what(); //automatycznie public abstract void play(int num); //automatycznie public abstract 17

Interfejs Aby klasa mogła realizować dany interfejs naleŝy uŝyć słowa kluczowego implements. MoŜna implementować kilka interfejsów na raz ( wielokrotne dziedziczenie ). MoŜna jednocześnie dziedziczyć (tylko po jednej klasie) i implementować (po wielu interfejsach) Przykład: class Gitara implements Instrument, Strunowy { String what() { return Jestem Gitara ; void play(int num) { System.out.println( Gram dźwięk +num); void strojenie() { System.out.println( Wykonuje strojenie ); class Altowka extends Skrzypce implements Instrument, Strunowy {... 18

Interfejs Kiedy zatem stosować klasy abstrakcyjne, a kiedy interfejsy? JeŜeli chcemy stworzyć klasę bazową bez implementowania metod naleŝy wybrać interfejs. Jedynie w razie konieczności zdefiniowania metod warto posłuŝyć się klasą abstrakcyjną. 19

Sprzątanie (Garbage Collector) W Javie nie ma destruktorów. Zakończenie Ŝycia niepotrzebnych obiektów oraz odzyskanie pamięci czyli odśmiecanie (ang. Garbage Collecting) następuje asynchronicznie i jest wykonywane przez specjalny wątek o niskim priorytecie. Odśmiecanie moŝna wymusić wywołując metodę: System.gc() 20

UŜyteczne klasy biblioteczne Standardowe pakiety: java.applet - tworzenie apletów java.awt okienka AWT java.beans uniwersalne komponenty java.io operacje wejścia/wyjścia java.lang podstawowe klasy java.math wielkie liczby java.net współpraca z siecią java.rmi przetwarzanie rozproszone java.security bezpieczeństwo java.sql zapytania do baz danych java.text operacje na tekście java.util klasy pomocnicze javax.swing okienka Swing 21

UŜyteczne klasy biblioteczne Klasa Object Klasa Object jest nadklasą dla wszystkich obiektów. Zapis class Klasa{.. jest więc równoznaczny z zapisem class Klasa extends Object {. Klasa Object zawiera kilka uŝytecznych metod: clone() tworzy bliźniaczy obiekt. equals(object) porównuje obiekty. finalize() umieszczamy w niej instrukcje zwalniające zasoby uŝywane przez klasę, metoda jest wywoływana przez Garbage Collector przed zwolnieniem obiektu z pamięci. tostring() przedstawia reprezentację obiektu w postaci łańcucha znaków. 22

UŜyteczne klasy biblioteczne Klasa String Klasa String reprezentuje łańcuch znaków. KaŜda sekwencja znaków zamknięta cudzysłowami jest interpretowana jako obiekt tej klasy. WaŜniejsze metody: length() zwraca długość łańcucha. charat(int i) zwraca znak z łańcucha z podanego miejsca. equals(string str), equalsignorecase(string str), compareto(string str) porównuje znaki dwóch ciągów. substring( ) grupa metod zwracających podłańcuch. concat(string) lub operator + - zwraca złączenie dwóch łańcuchów. tolowercase(), touppercase() - konwersja na małe, wielkie litery. replace(znak1, znak2) zastępowanie znaków w łańcuchu. 23

UŜyteczne klasy biblioteczne Klasa Math potęgowanie i pierwiastkowanie pow(a,b), sqrt() funkcje trygonometryczne cos(), sin(), tan() logarytm naturalny log(a) zaokrąglanie w górę/dól ceil(a), floor(a) zaokrąglanie do liczby całkowitej round(a), rint(a) wartość bezwzględna abs(a) Stałe - PI i E Niektóre funkcje mogą zwrócić specjalne wartości dla liczb zmiennoprzecinkowych: nie liczba: NaN nieskończoność: POSITIVE_INFINITY, NEGATIVE_INFINITY 24

UŜyteczne klasy biblioteczne Typy danych odnośnikowych W pakiecie java.lang.* znajdują się następujące klasy typów danych: Boolean, Byte, Short, Integer, Long, Float, Double Character Dają one moŝliwość przechowywania pola o wartości odpowiadającego typu podstawowego UmoŜliwiają konwersję na inne typy danych np. intvalue() - konwersja do int floatvalue() - konwersja do typu float longvalue() - konwersja do typu long parseint() - w klasie Integer, parsowanie obiektu String do typu int parsedouble() - w klasie Double, parsowanie String do double 25

Sprawdzanie równości obiektów Działanie operatorów == i!= w stosunku do obiektów moŝe być zaskakujące: public class Rownosc { public static void main(string[] args){ Integer n1 = new Integer(47); Integer n2 = new Integer(47); System.out.println(n1 == n2); Wykonanie klasy Rownosc da wynik: false Dlaczego? MoŜe się wydawać, Ŝe obiekty n1 i n2 są takie same. Ale n1 i n2 to nie obiekty, tylko referencje do obiektów (dwie, róŝne). Aby porównać zawartość obiektów, naleŝy uŝyć specjalnej metody equals() zdefiniowanej dla wszystkich obiektów (ale nie dla typów podstawowych, dla których dobrze działają == i!=): public class Rownosc { public static void main(string[] args) { Integer n1 = new Integer(47); Integer n2 = new Integer(47); System.out.println(n1.equals(n2)); 26

Wyjątki Wyjątek to zdarzenie, które moŝe się pojawić podczas wykonywania programu, powodujące przerwanie normalnego przepływu sterowania (wykonywania kolejnych instrukcji). Wyjątki pojawiają się kiedy nastąpiła jakaś nieprawidłowa sytuacja (np. dzielenie przez 0), która moŝe wymagać dodatkowego obsłuŝenia. Hierarchia klas wyjątków: 27

Wyjątki Zalety wyjątków: oddzielenie kodu obsługującego błędy, propagowanie błędu przez kolejne metody, moŝliwość grupowania błędów. 28

Wyrzucanie wyjątków UŜytkownik moŝe wyrzucać wyjątki za pomocą słowa kluczowego throw if(str.equals( koniec )) { throw new Exception( Zglaszam wyjatek ); Jeśli wyjątek nie jest obsłuŝony wewnątrz metody wymagana jest deklaracja jego wyrzucenia przez tę metodę. SłuŜy do tego słowo kluczowe throws: int read() throws java.io.ioexception {... 29

Przechwytywanie wyjątków Wyjątek moŝna wyrzucić dalej (słowo kluczowe throw) lub przechwycić za pomocą instrukcji try-catch int metoda(string str) throws Exception { try { Integer.parseInt(str); catch(numberformatexception e){ throw new Exception(); // lub obsłuŝyć. Po jednym bloku try, moŝe znajdować się kilka bloków catch. Bardzo uŝyteczną metodą w przypadku wyjątków jest metoda: public void printstacktrace(), która wypisuje na standardowe wyjście stos zgłoszeń wyjątków przez kolejne metody aŝ do miejsca, w którym jest wywołana. Jest to niezmiernie pomocne przy wyszukiwaniu powodu błędów w rozbudowanych aplikacjach, kiedy wyjątki są przekazywane przez dziesiątki metod. 30

Przechwytywanie wyjątków WaŜna jest kolejność bloków catch, gdyŝ wyjątek zostanie obsłuŝony przez pierwszy dobrze pasujący blok catch. Zaczynamy od obsługi wyjątków szczegółowych a następnie przechodzimy do typów ogólniejszych. try{ Integer.parseInt(str); catch(numberformatexception e){ catch(runtimeexception e){ try{ Integer.parseInt(str); catch(runtimeexception e){ catch(numberformatexception e){ java.lang.object java.lang.throwable java.lang.exception java.lang.runtimeexception java.lang.illegalargumentexception java.lang.numberformatexception 31

Przechwytywanie wyjątków finally Często mamy taki fragment kodu, który chcielibyśmy wykonać niezaleŝnie od tego czy w bloku try został zgłoszony wyjątek czy teŝ nie (np. zamknięcie operacji na pliku). Aby to osiągnąć, na końcu procedur wyjątków umieszcza się sekcję finally: try{ //Obszar który moŝe wyrzucić wyjątki A, B, C catch (A a){ // Obsluga dla wyjatku A catch (B b){ // Obsluga dla wyjatku B catch (C c){ //Obsluga dla wyjatku C finally{ //Czynnosci, ktore sa wykonywane za kazdym razem 32

GUI Java dostarcza dwa graficzne interfejsy uŝytkownika, będące częścią Java Foundation Classes: Abstract Window Toolkit (AWT), Swing. Pakiety AWT i Swing zawierają dwie podstawowe klasy: Component zawierającą metody dostępu do komponentów graficznych oraz metody pozwalające na zmianę ich właściwości, Container podklasa Component, dostarczająca tzw. pojemników, czyli obiektów grupujących komponenty. Istnieją dwa podstawowe pojemniki (klasy): Window definiujący okno, które będzie wyświetlane np. jako część aplikacji, Panel musi być częścią innego pojemnika, np. apletu lub okna. 33

GUI Podklasami Window są klasy Dialog i Frame. Klasa Frame pozwala na zdefiniowanie głównego okna, określenie jego tytułu, a takŝe zmianę jego wyglądu oraz rozmiaru. Klasa Dialog jest klasą która tworzy okno dialogowe i musi mieć swojego właściciela. Komponenty (takŝe inne pojemniki) do pojemników nadrzędnych przypisujemy metodą add();. Przykład: import java.awt.*; public static void main(string args[]){ Frame f = new Frame( Tytuł okna ); f.setsize(200,100); Button b = new Button( OK ); f.add(b); f.setvisible(true); 34

Zarządzanie układem Do rozmieszczenia komponentów w pojemnikach wykorzystuje się klasy zarządzające układem (ang. Layout Manager). BorderLayout domyślny układ dla pojemnika Frame; powoduje ułoŝenie elementów poprzez przyciągnięcie ich do następujących rejonów: NORTH, SOUTH, WEST, EAST, CENTER(domyślne) Button b2 = new Button( OK2 ); f.add(b, BorderLayout.SOUTH); 35

Zarządzanie układem FlowLayout jest domyślnym układem dla pojemnika Panel. Komponenty dodawane są od lewej do prawej i mają rozmiary domyślne (nie są powiększane na cały pojemnik) public static void main(string args[]){ Frame f = new Frame( Tytuł okna ); f.setsize(200,100); f.setlayout(new FlowLayout()); //zmieniamy układ Button b = new Button( OK ); f.add(b); Button b2 = new Button( OK2 ); f.add(b2); f.setvisible(true); 36

Panele public static void main(string args[]){ Frame f = new Frame( Tytuł okna ); f.setsize(200,100); Panel p = new Panel(); Button b = new Button( OK ); p.add(b); //dodanie do panela f.add(p, BorderLayout.NORTH); Button b2 = new Button( OK2 ); f.add(b2, BorderLayout.SOUTH); f.setvisible(true); 37

Komponenty tekstowe w AWT AWT dostarcza następujące komponenty tekstowe: etykieta: Label pole edycji: TextField duŝe pole edycji: TextArea Frame f = new Frame( Tytuł okna ); Panel p = new Panel(); Label lbl = new Label( Etykieta ); p.add(lbl); TextField tf = new TextField( Pole edycji ); p.add(tf); TextArea ta = new TextArea(,10,30); p.add(ta); f.add(p); f.setvisible(true); 38

Komponenty wyboru w AWT AWT dostarcza następujące komponenty wyboru: przyciski wyboru: Checkbox lista rozwijana: Choice lista wyboru: List Checkbox check = new Checkbox("checkbox"); panel.add(check); Choice ch = new Choice(); ch.add("pierwszy"); ch.add("drugi"); ch.add("trzeci"); panel.add(ch); List lst = new List(4); lst.add("pierwszy"); lst.add("drugi"); lst.add("trzeci"); panel.add(lst); 39

Pakiet Swing Swing to graficzny interfejs uŝytkownika Java drugiej generacji. Został opracowany w trakcie istnienia Javy 1.1 i włączony do JDK 1.2 jako podstawowy interfejs graficzny. Swing nie uŝywa narzędzi systemowych do tworzenia elementów interfejsu, oparty jest na wewnętrznych klasach Javy, co zapewnia pełną niezaleŝność od platformy (lekkie komponenty). Hierarchia klas Swing jest prawie identyczna z hierarchią klas AWT. Nazewnictwo klas: JComponent, JButton, JFrame. 40

Pakiet Swing Okna dialogowe słuŝące do komunikacji z uŝytkownikiem. Klasa JOptionPane showmessagedialog(...) showconfirmdialog(...) JOptionPane.YES_OPTION JOptionPane.NO_OPTION JOptionPane.CANCEL_OPTION Klasa JFileChooser 41

Obsługa zdarzeń Komponenty i inne obiekty GUI komunikują się ze sobą poprzez wysyłanie i odbieranie zdarzeń. Zdarzenia (pochodne EventObject) wysyłane są przez dany obiekt do jednego lub kilku innych obiektów, tzw. multicast. Obiekty odbierają zdarzenia poprzez metody je obsługujące (tzw. event handlers). Odbiorcy zdarzeń (klasy implementujące EventListener) deklarują jakimi zdarzeniami są zainteresowane. słuchacz1 Button1 Button2 Text słuchacz2 słuchacz3 42

NajwaŜniejsze zdarzenia w GUI W Javie istnieje wiele zdarzeń oraz interfejsów je obsługujących (na róŝnych poziomach w hierarchii klas). Z punktu widzenia GUI najwaŝniejsze zdarzenia to: - zdarzenia wysyłane przez komponenty: ActionEvent - zdarzenia wysyłane przez myszkę: MouseEvent - zdarzenia wysyłane przez klawiaturę: KeyEvent - zdarzenia wysyłane przez okno: WindowEvent Odpowiadają im następujące interfejsy, odbierające zdarzenia: - ActionListener - MouseListener i MouseMotionListener - WindowListener (WindowAdapter) 43

Window Listener Przykład zamykania aplikacji: import java.awt.*; import java.awt.event.*; public class Start { public static void main(string args[]) { Frame f = new Frame("tytul okna"); SluchaczOkna lst = new SluchaczOkna (); f.addwindowlistener(lst); f.setvisible(true); class SluchaczOkna extends WindowAdapter { public void windowclosing(windowevent e) { System.exit(0); 44

Action Listener Przykład obsługi przycisku: import java.awt.event.*; import java.awt.*; public class Start{ public Start() { Frame frame = new Frame(); frame.setsize(500, 400); Button btn = new Button("Klik"); btn.addactionlistener(new Sluchacz()); frame.add(btn); frame.setvisible(true); //inaczej: //Sluchacz sl = new Sluchacz(); //btn.addactionlistener(sl); public static void main(string[] args) { Start str = new Start(); class Sluchacz implements ActionListener { public void actionperformed(actionevent e){ System.out.println("Wcisnales przycisk"); 45