120 likes | 389 Views
Plan Prezentacji. Wczytywanie grafiki Wyświetlanie obrazów Podwójne buforowanie, Dźwięki w apletach Wątki i procesy Stany wątku Klasa Thread Synchronizacja i priorytety wątków Obsługa wyjątków. Wczytywanie grafiki.
E N D
Plan Prezentacji • Wczytywanie grafiki • Wyświetlanie obrazów • Podwójne buforowanie, • Dźwięki w apletach • Wątki i procesy • Stany wątku • Klasa Thread • Synchronizacja i priorytety wątków • Obsługa wyjątków
Wczytywanie grafiki • Obrazy zapisane w postaci plików na dysku lub w Internecie można wczytać do aplikacji w Javie i wyświetlić na obiektach Graphics. Jeśli obraz znajduje się na dysku lokalnym, należy zastosować poniższą procedurę: Stringfilename = "...": Imageimage = lmageI0.read(new File(filename)):
Wczytywanie grafiki • W przypadku obrazu z adresu URL: • String urlname = "..." • Image image = ImageI0.read(new URL(urlname)): • Metoda read powoduje wyjątek l0Excepti on, jeśli obraz jest niedostępny.
Wyświetlanie obrazów • Aby wyświetlić obraz, można skorzystać z metody: • booleandrawImage(Imageimg, int x, int y, ImageObserverobserver) • Rysuje obraz w naturalnym rozmiarze.
Wyświetlanie obrazów • Lub: • booleandrawImage(Imageimg, int x, int y, intwidth, intheight, ImageObserverobserver) • Rysuje obraz o zmienionych wymiarach. System dopasowuje rozmiar obrazu do obszaru o podanej szerokości i wysokości
Przykład import java.awt.*; import java.applet.*; public class ImageExample extends Applet { Image moj_obraz; moj_obraz = getImage(base,"przyklad.jpg"); public void paint(Graphics g) { g.drawImage(my_gif,20,20,this); g.drawImage(my_gif,20,140,30,40,this); } }
Podwójne buforowanie • Wykonywanie wielu operacji graficznych może spowodować, że obraz będzie migotał. Aby tego uniknąć można zastosować technikę zwaną podwójnym buforowaniem. Polega ona na tym, aby zawartość okna najpierw narysować na obrazie(obiekcie typu Image) umieszczonym wpamięci, a następnie cały obraz przenieść na ekran.
Przykład import java.applet.*; import java.awt.event.*; import java.awt.*; public classDoubleBufferingextendsAppletimplementsMouseMotionListener { GraphicsbufferGraphics; Imageoffscreen; Dimensiondim; intcurX, curY; public voidinit() { dim = getSize(); addMouseMotionListener(this); setBackground(Color.black); offscreen = createImage(dim.width,dim.height); bufferGraphics = offscreen.getGraphics(); }
Przykład cd. public voidpaint(Graphics g) { bufferGraphics.clearRect(0,0,dim.width,dim.width); bufferGraphics.setColor(Color.red); bufferGraphics.drawString("Double-buffered",10,10); bufferGraphics.fillRect(curX,curY,20,20); g.drawImage(offscreen,0,0,this); } public voidupdate(Graphics g) { paint(g); } public voidmouseMoved(MouseEventevt) { curX = evt.getX(); curY = evt.getY(); repaint(); } public voidmouseDragged(MouseEventevt){} }
Przykład cd. http://sirius.cs.put.poznan.pl/~inf100260/applets/
Dźwięki import java.applet.*; import java.awt.event.*; import java.awt.*; public classPrzykladowyDzwiekextendsAppletimplementsMouseListener { AudioClipdzwiek; public voidinit() { dzwiek = getAudioClip(getDocumentBase(),"pliczek.wav"); addMouseListener(this); setBackground(Color.pink); } public voidpaint(Graphics g) { g.drawString("Kliknij by usłyszeć dzwięk",20,20); } public voidmouseClicked(MouseEventevt) { dzwiek.play(); } // Oczywiście trzeba dodać jeszcze niezbędne metody obsługi kliknięć }
Dźwięki • Klasa AudioClip dostarczanastępujące metody: • public abstract void play() - zagranie dźwięku raz • public abstract void loop() - granie w pętli • public abstract void stop() - zatrzymanie grania dźwięku