Multimedia Obrazy i dźwięki w apletach Javy, praca z tekstem, zdarzenia od myszki, obsługa wyjątków w Javie, aplety z wątkami, animacja poklatkowa.

Slides:



Advertisements
Podobne prezentacje
Wstęp do strumieni danych
Advertisements

C++ wykład 4 ( ) Przeciążanie operatorów.
Java dla studentów II roku Wydziału Fizyki PW Przemysław Duda, 2012
Programowanie obiektowe
Programowanie obiektowe
Programowanie obiektowe
Wzorce.
Rysowanie GUI Określanie wyglądu komponentów
Tworzenie i obsługa programów – przykład 3 uwagi cd. Wykorzystując różne klasy biblioteki języka Java należy pamiętać w jakim pakiecie się znajdują. Wszystkie.
Nguyen Hung Son Uniwersytet Warszawski
Programowanie wielowątkowe
Programowanie sieciowe w Javie
1 Podstawy apletów Co to jest aplet, cykl życia apletu, metody apletu, metoda paint(), czcionki, kolory, parametryzowanie apletu, układ współrzędnych ekranowych,
Plan Prezentacji Wczytywanie grafiki Wyświetlanie obrazów
Język Java Wielowątkowość.
Semafory według normy POSIX
przygotował Michał Wdaniec
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Programowanie urządzeń mobilnych – wykład IV
Obiekty dynamiczne Tworzenie klas 3 MPDI Programowanie obiektowe W4.
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
Tadeusz Ziębakowski Zachodniopomorski Uniwersytet Technologiczny.
Aplety w javie.
Otwieranie elementów w różnych ramkach
Projekt jest współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego.
Programowanie obiektowe – zastosowanie języka Java SE
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Dziedziczenie Maciek Mięczakowski
Inicjalizacja i sprzątanie
Seminarium problemowe
Systemy wejścia i wyjścia Michał Wrona. Co to jest system wejścia i wyjścia? Pobierania informacji ze źródeł danych, zdolnych przesyłać sekwencje bajtów,
Co jeszcze mógłby wymyślić Einstein gdyby znał applety Javy? Dolnośląski Festiwal Nauki i Techniki Wrocław 2005.
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
EDYTOR GRAFIKI "PAINT" Prezentacja ma na celu zapoznanie uczniów z podstawowymi funkcjami edytora grafiki Paint.
1 Strumienie Hierarchie klas strumieniowych, strumienie bajtowe - klasy InputStream i OutputStream i ich metody, klasa File, strumienie plikowe, strumienie.
Temat 5: Pozycjonowanie elementów
Elementy multimedialne na stronie
Dodawanie efektów dźwiękowych do animacji j następnie naciśnij przycisk F5 lub kliknij pozycję Pokaz slajdów > Od początku w celu rozpoczęcia kursu. Na.
Aplikacje internetowe Grafika na stronach WWW ciąg dalszy Atrybuty znacznika body.
Aplikacje internetowe
Aplikacje internetowe
Kurs języka C++ – wykład 4 ( )
Temat 9: Obrazy i multimedia
prezentacja multimedialna
Damian Urbańczyk xHTML Elementy graficzne.
Formatowanie dokumentów
Model współbieżności w Javie autor: Grzegorz Szuba.
Model współbieżności w Javie
Grafika animacyjna w Macromedia Flash ACTION SCRIPT Joanna Sekulska-Nalewajko Katedra Informatyki Stosowanej Politechnika Łódzka 2006/2007.
Programowanie sieciowe w Javie Michał Kuciapski
Umieszczanie multimediów na stronie WWW. Co to jest multimadialność?  Multimedialność w dziedzinie komputerów jest najczęściej rozumiana jako możliwość.
Wykład 4 Dr Aneta Polewko-Klim Dr Aneta Polewko-Klim
PO13-1 / 19 Wykład 13 Wyjątki i ich zgłaszanie Wyłapywanie wyjątków Obsługa wyjątków Wykorzystanie polimorfizmu Filtrowanie wyjątków Błędy w konstruktorach.
Aplikacje internetowe Posługiwanie się ramkami. Zastosowanie ramek Wprowadzenie obsługi ramek w przeglądarce Netscape 2.0 otworzyło nową erę dla twórców.
Wykład 2 Programowanie obiektowe. Programowanie obiektowe wymaga dobrego zrozumienia działania funkcji definiowanych przez użytkownika, w ten sposób będziemy.
Multimedia w HTML5 Statyczne witryny internetowe 2TIa Marek Kwiatkowski.
Podstawy informatyki Mechanizm obsługi sytuacji wyjątkowych Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu.
Wykład 4 Dr Aneta Polewko-Klim Dr Aneta Polewko-Klim
Programowanie Obiektowe – Wykład 6
Wątki, programowanie współbieżne
LaTeX cd.
Wprowadzenie do edytorów tekstu.
Programowanie obiektowe – zastosowanie języka Java SE
Wyższa Szkoła Ekologii i Zarządzania
PGO Interfejsy Michail Mokkas.
Tworzenie wątków w Javie
Zapis prezentacji:

Multimedia Obrazy i dźwięki w apletach Javy, praca z tekstem, zdarzenia od myszki, obsługa wyjątków w Javie, aplety z wątkami, animacja poklatkowa.

Wczytywanie grafiki Standardowo Java obsługuje pliki w formacie GIF oraz JPG. Do wczytywania grafiki wykorzystuje się metodę getImage() klasy Applet. Metoda ta pobiera spod wskazanego adresu URL (Uniform Resorce Locator) plik z obrazkiem i przekształca go w obiekt Image: Image img = getImage(URL, FileName); URL - jest bazowym adresem katalogu zawierającego plik graficzny, FileName - określa nazwę tego pliku. Adres URL uzyskuje się za pomocą metody getCodeBase(), która zwraca ścieżkę do katalogu z apletem. Można też użyć metody getDocumentBase(), która zwraca adres dokumentu HTML z zagnieżdżonym apletem. Najczęściej plik z grafiką znajduje się w tym samym katalogu co kod klasy apletu i można go pobrać za pomocą wywołania: Image img = getImage(getCodeBase(), "plik.gif");

Wyświetlanie obrazków Do wyświetlania obrazków służy metoda drawImage() klasy Graphics. Jej najprostsza postać to: g.drawImage(img, 20, 20, this); img - referencja na obiekt Image, 20, 20 - współrzędne lewego górnego rogu wyświetlanego obrazka this - parametr odnoszący się do bieżącego komponentu, w którym obrazek jest wyświetlany. Często stosowana jest druga forma tej metody, która pozwala zmienić rozmiar obrazka. Na przykład jeśli chcemy wyświetlić obrazek w obszarze o szerokości 100 i wysokości 80 pikseli, wprowadzamy dodatkowe dwa parametry: g.drawImage(img, 20, 20, 100, 80, this);

Dźwięki w apletach Javy Obsługę plików dźwiękowych zapewnia klasa AudioClip z pakietu java.applet. Wcześniejsze wersje Javy mogły obsługiwać tylko pliki dźwiękowe w formatach AU lub CLIP. Obecnie Java potrafi obsługiwać również formaty: AIFF, WAV i MIDI Aby załadować plik dźwiękowy, należy użyć metody getAudioClip() z parametrami w postaci adresu URL i nazwy pliku. Na przykład: AudioClip ac = getAudioClip(getCodeBase(), "beep.au"); Po załadowaniu pliku z muzyką można go odtworzyć za pomocą metod klasy AudioClip: play() - jednorazowe odtwarzanie klipu loop() - odtwarzanie klipu w pętli Jeśli odgrywamy klip w pętli, musimy pamiętać o przerwaniu odtwarzania dźwięku za pomocą metody stop() wywoływanej na rzecz obiektu AudioClip.

Praca z tekstem Metoda Opis FontMetrics(Font) getFont() getHeight() Klasa FontMetrics zawiera metody przeznaczone do pracy z tekstem. Metody te pozwalają ustalić własności używanej czcionki, takie jak wysokość czy szerokość wyświetlanych znaków. Metoda Opis FontMetrics(Font) Konstruktor - tworzy nowy obiekt FontMetrics na podstawie określonej czcionki. getFont() Zwraca bieżącą czcionkę. getHeight() Zwraca całkowitą wysokość czcionki. charWidth(char) Zwraca szerokość (w pikselach) danego znaku tej czcionki. stringWidth(String) Zwraca szerokość (w pikselach) danego łańcucha.

Zdarzenia od myszki Wyróżnia się dwa rodzaje zdarzeń - zdarzenia typu Mouse: kliknięcie, a także tylko naciśnięcie lub zwolnienie dowolnego klawisza myszy, najechanie kursorem myszy na obszar zajmowany przez dany komponent, opuszczenie obszaru komponentu. Zdarzenia typu MouseMotion: przesuwanie kursora myszy, przeciąganie kursora myszy. Aby wykrywać określone zdarzenia pochodzące od myszy, należy zaimplementować interfejsy: MouseListener MouseMotionListener MouseMotionListener posiada tylko dwie metody: public void mouseDragged(MouseEvent e){} public void mouseMoved(MouseEvent e){}

Zdarzenia od myszki MouseListener wymaga zdefiniowania pięciu metod: public void mouseClicked(MouseEvent e){} public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} Parametrem każdej z tych metod jest referencja do obiektu MouseEvent - zawierającego m.in. informację o aktualnych współrzędnych kursora myszy. Na rzecz obiektu MouseEvent można wywoływać następujące metody: getClickCount() - zwraca całkowitą liczbę kliknięć przyciskiem myszy, getPoint() - zwraca obiekt Point - współrzędne (x,y) klikniętego punktu, getX() - zwraca współrzędną x pozycji kursora, getY() - zwraca współrzędną y pozycji kursora.

Obsługa wyjątków w Javie Czasami zdarza się tak, że program kompiluje się poprawnie, natomiast po jego uruchomieniu pojawiają się problemy. Wszystkie zdarzenia, które mogą spowodować awarię w pracy programu nazywane są wyjątkami (exceptions). Do obsługi wyjątków służy blok try... catch, który jest wykonywany automatycznie w przypadku pojawienia się błędu. Słowem kluczowym try rozpoczynamy blok kodu, który może zgłaszać wyjątki. Jeśli wewnątrz tego bloku pojawi się wyjątek jest on wyrzucany (throw). Słowo kluczowe catch używane jest do przechwytywania wyjątków. Najczęściej używana postać bloku try...catch jest następująca: try {// blok kodu, który może spowodować wyjątek } catch (Typ_wyjątku identyfikator_wyjątku) { // obsługa wyjątku

Aplety z wątkami Wątki to sekwencje kodu, które mogą wykonywać się niezależnie od siebie (asynchronicznie). Umieszczenie czasochłonnych zadań w ich własnych wątkach zwiększa wydajność programu - pozwala wykorzystać czas bezczynności, który występuje w większości programów. Wątki są reprezentowane przez klasę Thread, która znajduje się w pakiecie java.lang. Istnieją dwa sposoby tworzenia wątków: utworzenie klasy implementującej interfejs Runnable, wyprowadzenie nowej klasy z klasy Thread, która sama implementuje interfejs Runnable Klasy działające jako wątki, tzw. klasy wątkowe muszą zawierać metodę public void run() zawierającą cały kod wątku. Uruchomienie wątku następuje poprzez wywołanie metody Thread.start();

Konstruktory i metody klasy Thread Metoda Opis Thread() Tworzy nowy wątek (obiekt klasy Thread) Thread(String nazwa) Tworzy nowy wątek o określonej nazwie Thread(Runnable o) Tworzy nowy wątek dla obiektu Runnable Thread(Runnable o, String nazwa) Tworzy nowy wątek dla obiektu Runnable i nadaje mu określoną nazwę getName() Pobiera i zwraca nazwę wątku getPriority() Pobiera i zwraca priorytet wątku isAlive() Sprawdza, czy wątek jest aktywny setName(String nazwa) Ustawia nazwę wątku setPriority() Ustawia priorytet wątku

Metody klasy Thread Metoda Opis start() sleep(long) wait() notify() Uruchamia wątek poprzez wywołanie jego metody run() sleep(long) Usypia wątek na określoną liczbę milisekund wait() Powoduje zablokowanie wątku do chwili wywołania metody notify() notify() Odblokowanie wątku notifyAll() Odblokowanie wszystkich wstrzymanych wątków join() Czeka na zakończenie wątku destroy() Zniszczenie wątku yield() Sprawia, że wątek oddaje sterowanie

Ćwiczenie 1 Narysuj w edytorze grafiki kulkę o wymiarach 20x20 pix. i zapisz rysunek w pliku "kulka.gif". Wykonaj prostą animację ruchu kulki odbijającej się od brzegów apletu. Przesunięcie kulki uzyskuje się poprzez wyczyszczenie apletu metoda clearRect i narysowanie jej w nowym miejscu. import java.awt.*; import java.applet.*; public class Grafika extends Applet { Image image; int x, y, vx, vy; public void init() x=0; y=0; vx=7; vy=5; image = getImage(getCodeBase(),"kulka.gif"); }

Animacja ruchu kulki public void paint(Graphics g) { int xm = getSize().width; int ym = getSize().height; while (true) g.drawImage(image, x, y, this); x=x+vx; y=y+vy; if (x<=0) vx=-1*vx; if (x>=xm-20) vx=-1*vx; if (y<=0) vy=-1*vy; if (y>=ym-20) vy=-1*vy; for (int k=0; k<3e6; k++); g.clearRect(0, 0, xm, ym); }

Wersja wielowątkowa import java.awt.*; import java.applet.Applet; public class Grafika extends Applet implements Runnable { Thread thread = null; Image image; int x,y,vx,vy; public void init() x=0; y=0; vx=7; vy=5; image = getImage(getDocumentBase(),"kulka.gif"); thread = new Thread(this); } publÏc void start() thread.start();

Wersja wielowątkowa - c.d. public void run() { while (thread!=null) try { thread.sleep(50); } catch (InterruptedException e) {} repaint(); } public void paint(Graphics g) int xm = getSize().width; int ym = getSize().height; g.drawImage(image, x, y, this); x=x+vx; y=y+vy; if (x<=0) vx=-1*vx; if (x>=xm-20) vx=-1*vx; if (y<=0) vy=-1*vy; if (y>=ym-20) vy=-1*vy;

Ćwiczenie 2 Utwórz aplet z grafiką i efektami dźwiękowymi. Na aplecie umieść dwa przyciski: Start - rozpoczynający odtwarzanie pliku dźwiękowego i Stop - zatrzymujący odtwarzanie tego klipu. import java.awt.*; import java.applet.*; import java.awt.event.*; public class Muzyka extends Applet implements ActionListener { AudioClip audioclip; Image image; Button start, stop; public void init() audioclip = getAudioClip(getCodeBase(), "song.mid"); image = getImage(getCodeBase(),"choinka.jpg"); start = new Button("Start"); start.addActionListener(this); add(start);

Dźwięk i grafika stop = new Button("Stop"); stop.addActionListener(this); add(stop); } public void paint(Graphics g) { g.drawImage(image, 10, 40, 280, 250, this); public void actionPerformed(ActionEvent e) Object o = e.getSource(); if (o==start) audioclip.loop(); if (o==stop) audioclip.stop();

Ćwiczenie 3 Napisz klasę obsługującą zdarzenia od myszki. Pojedyncze kliknięcie myszką w obszarze apletu ma spowodować narysowanie punktu oraz wyświetlenie jego współrzędnych. import java.awt.*; import java.applet.*; import java.awt.event.*; public class Myszka extends Applet implements MouseListener { Point p; String string=""; public void init() addMouseListener(this); } public void paint(Graphics g) g.drawString(string, 20, 20); g.drawLine(p.x, p.y, p.x, p.y);

Metody interfejsu MouseListener public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { public void mouseReleased(MouseEvent e){ p = e.getPoint(); string = "x = " + p.x + " y = " + p.y; repaint(); public void mouseEntered(MouseEvent e) { public void mouseExited(MouseEvent e) {

Przykład - falujący tekst import java.awt.*; import java.applet.*; public class Napis extends Applet implements Runnable { String napis = "Java"; Font font = new Font("Serif", Font.BOLD, 24); FontMetrics fm = getFontMetrics(font); int dl = napis.length(); char[] znak = new char[dl]; Thread thread = null; public void init() { znak = napis.toCharArray(); } public void start() { if (thread == null) { thread = new Thread(this); thread.start(); public void stop() { thread = null;

Falujący tekst - c.d. public void run() { while (thread!=null) { try { Thread.sleep(300); } catch (InterruptedException e) {} repaint(); } public void losuj_kolor(Graphics g) { int red = (int)(Math.random()*255); int green = (int)(Math.random()*255); int blue = (int)(Math.random()*255); g.setColor(new Color(red, green, blue)); public void paint(Graphics g) { g.setFont(font); int x=40, y=40; for (int i=0; i<dl; i++) { losuj_kolor(g); g.drawChars(znak, i, 1, x, y); x += fm.charWidth(znak[i]); y += (int)(Math.random()*20 - 10);

Animacja poklatkowa Jest to prosta technika realizująca animację, polegająca na cyklicznym wyświetlaniu obrazków zapisanych na dysku, np. a1.jpg, a2.jpg, ..., a8.jpg import java.awt.*; import java.applet.Applet; public clas football extends Applet implements Runnable{ Image A[] = new Image[8]; Image image; Thread thread; public void init() { for (int i=0; i<8; i++) A[i]=getImage(getDocumentBase(),"a"+(i+1)+".jpg"); }

Animacja poklatkowa public void start() { thread = new Thread(this); thread.start(); } public void run() { int i=0; while (true){ image = A[i++]; if (i > 7) i = 0; repaint(); try { Thread.sleep(100); } catch (InterruptedException e) {} public void paint (Graphics g) { if (image != null) g.drawImage(image, 0, 0, this); public void update (Graphics g) { paint(g);