 2000 Prentice Hall, Inc. All rights reserved. Chapter 16 - Multimedia: Images, Animation, Audio and Video Outline 16.1 Introduction 16.2Downloading the.

Slides:



Advertisements
Similar presentations
2D Graphics Drawing Things. Graphics In your GUI, you might want to draw graphics E.g. draw lines, circles, shapes, draw strings etc The Graphics class.
Advertisements

Made with love, by Zachary Langley Applets The Graphics Presentation.
1 More on Applets Overview l Changing Colors l Changing Fonts & Styles l Applet Life-Cycle l Input using Dialog Window l Input using HTML parameters l.
Graphics You draw on a Graphics object The Graphics object cannot directly be created by your code, instead one is generated when the method paintComponent.
More Java Drawing in 2D Animations with Timer. Drawing Review A simple two-dimensional coordinate system exists for each graphics context or drawing surface.
(C) 2010 Pearson Education, Inc. All rights reserved. Java™ How to Program, 8/e.
1 L45 Multimedia: Applets and Applications. 2 OBJECTIVES  How to get and display images.  To create animations from sequences of images.  To create.
 2000 Prentice Hall, Inc. All rights reserved. 1 Chapter 14 - Exception Handling Outline 14.1Introduction 14.2When Exception Handling Should Be Used 14.3Other.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. Chapter Java Multimedia: Images, Animation, Audio.
Event Handling Events and Listeners Timers and Animation.
Lecture 24 Applets. Introduction to Applets Applets should NOT have main method but rather init, stop, paint etc They should be run through javac compiler.
 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 19 – Multimedia: Images, Animation and Audio Outline 19.1 Introduction 19.2 Loading, Displaying.
Liang, Introduction to Java Programming, Fifth Edition, (c) 2005 Pearson Education, Inc. All rights reserved Chapter 14 Applets, Images,
 2000 Prentice Hall, Inc. All rights reserved. Java Multimedia: Images, Animation, Audio and Video Outline 30.1 Introduction 30.2Loading, Displaying and.
 Pearson Education, Inc. All rights reserved Multimedia: Applets and Applications.
Chapter 13: Advanced GUIs and Graphics J ava P rogramming: From Problem Analysis to Program Design, From Problem Analysis to Program Design, Second Edition.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved L05 (Chapter 16) Applets.
Computer Science [3] Java Programming II - Laboratory Course Lab 7: Multimedia: Applets and Applications Faculty of Engineering & IT Software Engineering.
Java Programming, 2E Introductory Concepts and Techniques Chapter 2 Creating a Java Application and Applet.
Introduction Multimedia –Use of sound, image, graphics and video –Makes applications “come alive”
Applets Java API.
Chapter 13 Advanced GUIs and Graphics. Chapter Objectives Learn about applets Explore the class Graphics Learn about the class Font Explore the class.
Java Programming, 3e Concepts and Techniques Chapter 2 - Part 2 Creating a Java Application and Applet.
Java Programming, 3e Concepts and Techniques Chapter 3 Section 65 – Manipulating Data Using Methods – Java Applet.
 2005 Pearson Education, Inc. All rights reserved Multimedia: Applets and Applications.
 2002 Prentice Hall, Inc. All rights reserved. Chapter 18 – Multimedia: Images, Animation, Audio and Video Outline 18.1 Introduction 18.2 Loading, Displaying.
(c) 2008 E.S.Boese All Rights Reserved. Threads and Media Chapter 8 - Lecture Slides 1.
Applets Chapter 17.  Java’s big splash onto the scene came in the mid 90’s. The people at Sun Microsystems had managed to work java programs into Web.
Java Programming: From Problem Analysis to Program Design, 4e Chapter 12 Advanced GUIs and Graphics.
© Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Outline 20.1 Test-Driving the Screen Saver Application.
JAPPLET.
Applets and Frames CS 21a: Introduction to Computing I First Semester,
Chapter 17: Applets, Images, and Sound. Objectives Learn about applets Write an HTML document to host an applet Use the init() method Work with JApplet.
GUI programming Graphical user interface-based programming.
Canvas and Graphics CS 21a. 9/26/2005 Copyright 2005, by the authors of these slides, and Ateneo de Manila University. All rights reserved L17: Canvas.
Lesson 34: Layering Images with Java GUI. The FlowLayout RECAP.
 2000 Prentice Hall, Inc. All rights reserved. Java Multimedia: Images, Animation, Audio and Video Outline 30.1 Introduction 30.2Loading, Displaying and.
Graphic User Interface. Graphic User Interface (GUI) Most of us interact with computers using GUIs. GUIs are visual representations of the actions you.
MSc Workshop - © S. Kamin, U. ReddyLect 3 - GUI -1 Lecture 3 - Graphical User Interfaces r GUI toolkits in Java API r JFrame r GUI components.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved Review of Graphics in Java,
© Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Tutorial 25 – Ticket Information Application Introducing.
Applets and Frames. Copyright 2005, by the authors of these slides, and Ateneo de Manila University. All rights reserved L14: GUI Slide 2 Applets Usually.
Java Programming Applets. Topics Write an HTML document to host an applet Understand simple applets Use Labels with simple AWT applets Write a simple.
© Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Outline 21.1 Test-Driving the Painter Application.
Java Programming Working with Sound and Images. Topics Learn about the paint() and repaint() methods Learn about paintComponent() method Use the drawString()
Introduction Multimedia –Use of sound, image, graphics and video –Makes applications “come alive”
Chapter 14 Applets and Advanced GUI  The Applet Class  The HTML Tag F Passing Parameters to Applets F Conversions Between Applications and Applets F.
Intro to Applets. Applet Applets run within the Web browser environment Applets bring dynamic interaction and live animation to an otherwise static HTML.
1 GUIs, Layout, Drawing Rick Mercer. 2 Event-Driven Programming with Graphical user Interfaces  Most applications have graphical user interfaces (GUIs)
Field Trip #23 Hangman By Keith Lynn. JApplet A JApplet is a top-level container An applet is a small Java program that is executed by another program.
1 GUI programming Graphical user interface-based programming Chapter G1 (pages )
© Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Outline 24.1 Test-Driving the Enhanced Car Payment.
© Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Tutorial 2 – Welcome Application Introduction to Graphical.
Creating a Java Application and Applet
1 Applets. 2 What is an applet? Applet: a Java program that can be inserted into a web page and run by loading that page in a browser brings web pages.
© Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Outline 27.1 Test-Driving the Drawing Shapes Application.
Rina System development with Java Instructors: Rina Zviel-Girshin Lecture 10.
Chapter 10 - Writing Graphical User Interfaces1 Chapter 10 Writing Graphical User Interfaces.
Lesson 28: More on the GUI button, frame and actions.
© Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Outline 28.1 Java Speech API 28.2 Downloading and.
 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 3 - Introduction to Java Applets Will not cover Section 3.7 Thinking About Objects: Identifying.
1 Applets Programming. Introduction Java programs are divided into two main categories, applets and applications. An application is an ordinary Java program.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter Chapter 7 ( Book Chapter 14) GUI and Event-Driven Programming.
Chapter 5 Introduction to Defining Classes Fundamentals of Java.
©TheMcGraw-Hill Companies, Inc. Permission required for reproduction or display. Chapter 7 Event-Driven Programming and Basic GUI Objects.
Lecture 09 Applets.
Chapter 13: Advanced GUIs and Graphics
Graphical user interface-based programming
UNIT-5.
Advanced GUIs and Graphics
Presentation transcript:

 2000 Prentice Hall, Inc. All rights reserved. Chapter 16 - Multimedia: Images, Animation, Audio and Video Outline 16.1 Introduction 16.2Downloading the Java Media Framework 16.3Loading, Displaying and Scaling Images 16.4Loading and Playing Audio Clips 16.5 The Java Media Player 16.6Animating a Series of Images 16.7Animation Issues 16.8Customizing Applets via the HTML param Tag 16.9Image Maps 16.10Java Plug-In 16.11Internet and World Wide Web Resources

 2000 Prentice Hall, Inc. All rights reserved Introduction Revolution in computer industry –Before, computers used for high-speed calculations –Now, data manipulation important Multimedia –"Sizzle" of Java - images, sound, video –CDs, DVDs, video cards –Demands extraordinary computing power Fast processors making multimedia possible Java –Built-in multimedia capabilities Most programming languages do not –Develop powerful multimedia applications

 2000 Prentice Hall, Inc. All rights reserved. 16.2Downloading the Java Media Framework Java media framework (JMF) –Extension to Java API –Enhanced processing of images, audio, and video –Constantly evolving –Some examples required the JMF, not included in J2SDK JMF Downloads for Windows and Solaris –At time of writing, early versions of JMF 2.0 available

 2000 Prentice Hall, Inc. All rights reserved. 16.2Loading, Displaying and Scaling Images Java Multimedia –Discuss graphics, images, animations, sounds, and video –Begin with images Class Image ( java.awt ) –Abstract class, cannot create an object directly Request Image be loaded and returned –getImage( imageLocation, filename ); Of class Applet (superclass of JApplet ) imageLocation –getDocumentBase() is URL (address) of HTML file filename -.gif or.jpg (.jpeg ) 10 private Image logo1; 16 logo1 = getImage( getDocumentBase(), "logo.gif" );

 2000 Prentice Hall, Inc. All rights reserved. 16.2Loading, Displaying and Scaling Images Displaying Image s –Method drawImage (class Graphics ) –Many overloaded versions g.drawImage( myImage, x, y, ImageObserver ); myImage - Image object x,y - coordinates to display image ImageObserver - object on which image is displayed –Use " this" to indicate the applet –Can be any object that implements ImageObserver interface 24 g.drawImage( logo1, 0, 0, this );

 2000 Prentice Hall, Inc. All rights reserved. 16.2Loading, Displaying and Scaling Images Displaying Image s –g.drawImage( myImage, x, y, width, height, ImageObserver ); width and height –Dimensions of image (automatically scaled) getWidth(), getHeight() –Returns dimensions of applet 28 g.drawImage( logo1, 0, 120, 29 getWidth(), getHeight() - 120, this );

 2000 Prentice Hall, Inc. All rights reserved. 16.2Loading, Displaying and Scaling Images Class ImageIcon –Concrete class (can create objects) –Example constructor and initialization Displaying Icons –Method paintIcon (class Graphics ) myIcon.paintIcon( Component, Graphics, x, y ) Component - Component object on which to display image ( this ) Graphics - Graphics object used to render image ( g ) x, y - coordinates of Icon 11 private ImageIcon logo2; 17 logo2 = new ImageIcon( "logo.gif" );

 2000 Prentice Hall, Inc. All rights reserved. 16.2Loading, Displaying and Scaling Images Usage –ImageIcon s simpler than Image s Create objects directly No need for ImageObserver reference –All components are ImageObserver s –Cannot scale ImageIcon s Scaling –Use ImageIcon method getImage Returns Image reference This can be used with drawImage and scaled

 2000 Prentice Hall, Inc. All rights reserved. Outline 1. Declare objects 2. init() 2.1 Initialize objects 3. paint() 3.1 drawImage 1// Fig. 16.1: LoadImageAndScale.java 2// Load an image and display it in its original size 3// and scale it to twice its original width and height. 4// Load and display the same image as an ImageIcon. 5import java.applet.Applet; 6import java.awt.*; 7import javax.swing.*; 8 9public class LoadImageAndScale extends JApplet { 10 private Image logo1; 11 private ImageIcon logo2; // load the image when the applet is loaded 14 public void init() 15 { logo1 = getImage( getDocumentBase(), "logo.gif" ); 17 logo2 = new ImageIcon( "logo.gif" ); 18 } // display the image 21 public void paint( Graphics g ) 22 { 23 // draw the original image g.drawImage( logo1, 0, 0, this ); // draw the image scaled to fit the width of the applet 27 // and the height of the applet minus 120 pixels 28 g.drawImage( logo1, 0, 120, 29 getWidth(), getHeight() - 120, this ); Notice the parameters to the constructors. Image objects cannot be created directly. drawImage calls (second call has scaling). this means the image will be shown on the applet.

 2000 Prentice Hall, Inc. All rights reserved. Outline 3.2 paintIcon Program Output logo2.paintIcon( this, g, 180, 0 ); 33 } 34} // draw the icon using its paintIcon method Call to paintIcon, displays icon on this applet (a Component ).

 2000 Prentice Hall, Inc. All rights reserved. 16.4Loading and Playing Audio Clips Audio clips –Require speakers and sound board –Sound engine - plays audio clips Supports.au,.wav,. aif,.mid Java Media Framework supports additional formats

 2000 Prentice Hall, Inc. All rights reserved. 16.4Loading and Playing Audio Clips Playing audio clips –play method in Applet –Plays clip once, marked for garbage collection when finished play( location, soundFileName ); location - getDocumentBase (URL of HTML file) play( soundURL ); soundURL - URL that contains location and filename of clip

 2000 Prentice Hall, Inc. All rights reserved. 16.4Loading and Playing Audio Clips Playing audio clips –Method play from AudioClip interface More flexible than Applet method play Audio stored in program, can be reused –getAudioClip Returns reference to an AudioClip Same format as Applet method play –getAudioClip( location, filename ) –getAudioClip( soundURL ) 46 sound1 = getAudioClip( 47 getDocumentBase(), "welcome.wav" );

 2000 Prentice Hall, Inc. All rights reserved. 16.4Loading and Playing Audio Clips Playing audio clips –Once AudioClip loaded, use methods play - plays audio once loop - continuously loops audio in background stop - terminates clip that is currently playing Upcoming program –Use a JComboBox to select between two sounds 66 currentSound.loop(); 68 currentSound.stop(); 64 currentSound.play();

 2000 Prentice Hall, Inc. All rights reserved. Outline 1. Declare objects 1.1 GUI 1.2 Event handler stop 1// Fig. 16.2: LoadAudioAndPlay.java 2// Load an audio clip and play it. 3import java.applet.*; 4import java.awt.*; 5import java.awt.event.*; 6import javax.swing.*; 7 8public class LoadAudioAndPlay extends JApplet { 9 private AudioClip sound1, sound2, currentSound; 10 private JButton playSound, loopSound, stopSound; 11 private JComboBox chooseSound; // load the image when the applet begins executing 14 public void init() 15 { 16 Container c = getContentPane(); 17 c.setLayout( new FlowLayout() ); String choices[] = { "Welcome", "Hi" }; 20 chooseSound = new JComboBox( choices ); 21 chooseSound.addItemListener( 22 new ItemListener() { 23 public void itemStateChanged( ItemEvent e ) 24 { currentSound.stop(); currentSound = 28 chooseSound.getSelectedIndex() == 0 ? 29 sound1 : sound2; Once the selection changes, stop currentSound and set it equal to either sound1 or sound2.

 2000 Prentice Hall, Inc. All rights reserved. Outline 1.3 Register event handlers 2. Initialize AudioClip s 3. Method stop 30 } 31 } 32 ); 33 c.add( chooseSound ); ButtonHandler handler = new ButtonHandler(); 36 playSound = new JButton( "Play" ); 37 playSound.addActionListener( handler ); 38 c.add( playSound ); 39 loopSound = new JButton( "Loop" ); 40 loopSound.addActionListener( handler ); 41 c.add( loopSound ); 42 stopSound = new JButton( "Stop" ); 43 stopSound.addActionListener( handler ); 44 c.add( stopSound ); sound1 = getAudioClip( 47 getDocumentBase(), "welcome.wav" ); 48 sound2 = getAudioClip( 49 getDocumentBase(), "hi.au" ); 50 currentSound = sound1; 51 } // stop the sound when the user switches Web pages 54 // (i.e., be polite to the user) public void stop() 56 { 57 currentSound.stop(); 58 } 59 Notice how AudioClip s are initialized. Applet's stop method called when user switches web pages. Ensures clip stop playing (else could be annoying to user).

 2000 Prentice Hall, Inc. All rights reserved. Outline 4. Event handler 4.1 play, loop, stop private class ButtonHandler implements ActionListener { 61 public void actionPerformed( ActionEvent e ) 62 { 63 if ( e.getSource() == playSound ) 64 currentSound.play(); 65 else if ( e.getSource() == loopSound ) 66 currentSound.loop(); 67 else if ( e.getSource() == stopSound ) 68 currentSound.stop(); 69 } 70 } 71} Call methods play, loop, and stop as appropriate.

 2000 Prentice Hall, Inc. All rights reserved The Java Media Player Java Media Player –Comes with JMF –Can play Audio:.au,.wav,.aiff,.mid Video:.avi,.gsm,.mpg (.mpeg ),.mov,.rmf,.rtp,.viv Play/pause Position indicator Mute Volume Information

 2000 Prentice Hall, Inc. All rights reserved The Java Media Player JFileChooser ( javax.swing ) –Allows you to select a file

 2000 Prentice Hall, Inc. All rights reserved The Java Media Player JFileChooser ( javax.swing ) –Create JFileChooser –Open only files (not directories) –Returns an integer indicating user's action (selected file or cancel) –If cancel, set file to null 35 JFileChooser fileChooser = new JFileChooser(); 37 fileChooser.setFileSelectionMode( 38 JFileChooser.FILES_ONLY ); 39 int result = fileChooser.showOpenDialog( this ); 42 if ( result == JFileChooser.CANCEL_OPTION ) 43 file = null;

 2000 Prentice Hall, Inc. All rights reserved The Java Media Player –Otherwise, call getSelectedFile and assign result to file Class File discussed next chapter –Returns object that implements Player interface ( javax.media ) If file of correct format, returns object Method toURL converts file name and location into URL format 44 else 45 file = fileChooser.getSelectedFile(); 10 private Player player; 57 player = Manager.createPlayer( file.toURL() );

 2000 Prentice Hall, Inc. All rights reserved The Java Media Player –Registers event handler Interface ControllerListener, must define controllerUpdate –Takes ControllerEvent objects –Many subclasses, we use RealizeCompleteEvent subclass –Adds visual aspect of media clips Audio clips return null 58 player.addControllerListener( new EventHandler() ); 59 player.start(); // start player 108 Component visualComponent = 109 player.getVisualComponent(); 111 if ( visualComponent != null ) 112 c.add( visualComponent, BorderLayout.CENTER );

 2000 Prentice Hall, Inc. All rights reserved The Java Media Player –Display controls –Update content pane –Programmer-defined method removePreviousPlayer Close current player 114 Component controlsComponent = 115 player.getControlPanelComponent(); 117 if ( controlsComponent != null ) 118 c.add( controlsComponent, BorderLayout.SOUTH ); 120 c.doLayout(); 73 player.close();

 2000 Prentice Hall, Inc. All rights reserved The Java Media Player –Get references to visual and control components –Container method remove Remove Component s from interface 75 Component visual = player.getVisualComponent(); 76 Component control = player.getControlPanelComponent(); 80 if ( visual != null ) 81 c.remove( visual ); 83 if ( control != null ) 84 c.remove( control );

 2000 Prentice Hall, Inc. All rights reserved. Outline 1. Declarations 1.1 Constructor 1// Fig. 16.3: MediaPlayerDemo.java 2// Uses a Java Media Player to play media files. 3import java.awt.*; 4import java.awt.event.*; 5import java.io.*; 6import javax.swing.*; 7import javax.media.*; 8 9public class MediaPlayerDemo extends JFrame { 10 private Player player; 11 private File file; public MediaPlayerDemo() 14 { 15 super( "Demonstrating the Java Media Player" ); JButton openFile = new JButton( "Open file to play" ); 18 openFile.addActionListener( 19 new ActionListener() { 20 public void actionPerformed( ActionEvent e ) 21 { 22 openFile(); 23 createPlayer(); 24 } 25 } 26 ); 27 getContentPane().add( openFile, BorderLayout.NORTH ); setSize( 300, 300 ); 30 show(); 31 }

 2000 Prentice Hall, Inc. All rights reserved. Outline 2. Method openFile 2.1 JFileChooser 2.2 file 3. Method createPlayer 3.1 removePrevious Player 3.2 createPlayer 3.3 Event handler 3.4 start private void openFile() 34 { JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode( 38 JFileChooser.FILES_ONLY ); 39 int result = fileChooser.showOpenDialog( this ); // user clicked Cancel button on dialog if ( result == JFileChooser.CANCEL_OPTION ) 43 file = null; 44 else 45 file = fileChooser.getSelectedFile(); 46 } private void createPlayer() 49 { 50 if ( file == null ) 51 return; removePreviousPlayer(); try { 56 // create a new player and add listener player = Manager.createPlayer( file.toURL() ); 58 player.addControllerListener( new EventHandler() ); 59 player.start(); // start player 60 } Create a JFileChooser, use it to select a file. Test for cancel option. If not, assign file to file. Assign player result of createPlayer. Add event handler (named inner class), call start method to being playing clip.

 2000 Prentice Hall, Inc. All rights reserved. Outline 4. removePrevious Player 4.1 close 4.2 remove 5. main 61 catch ( Exception e ){ 62 JOptionPane.showMessageDialog( this, 63 "Invalid file or location", "Error loading file", 64 JOptionPane.ERROR_MESSAGE ); 65 } 66 } private void removePreviousPlayer() 69 { 70 if ( player == null ) 71 return; player.close(); Component visual = player.getVisualComponent(); 76 Component control = player.getControlPanelComponent(); Container c = getContentPane(); if ( visual != null ) 81 c.remove( visual ); if ( control != null ) 84 c.remove( control ); 85 } public static void main(String args[]) 88 { 89 MediaPlayerDemo app = new MediaPlayerDemo(); 90 Close the current playerGet references to Component s and remove them from content pane.

 2000 Prentice Hall, Inc. All rights reserved. Outline 6. Event handler 6.1 getVisualComponent 6.2 getControlPanel Component 91 app.addWindowListener( 92 new WindowAdapter() { 93 public void windowClosing( WindowEvent e ) 94 { 95 System.exit(0); 96 } 97 } 98 ); 99 } // inner class to handler events from media player 102 private class EventHandler implements ControllerListener { 103 public void controllerUpdate( ControllerEvent e ) { 104 if ( e instanceof RealizeCompleteEvent ) { 105 Container c = getContentPane(); // load Visual and Control components if they exist Component visualComponent = 109 player.getVisualComponent(); if ( visualComponent != null ) 112 c.add( visualComponent, BorderLayout.CENTER ); Component controlsComponent = 115 player.getControlPanelComponent(); if ( controlsComponent != null ) 118 c.add( controlsComponent, BorderLayout.SOUTH ); Get Component s and attach to content pane.

 2000 Prentice Hall, Inc. All rights reserved. Outline 6.3 doLayout Program Output c.doLayout(); 121 } 122 } 123 } 124}

 2000 Prentice Hall, Inc. All rights reserved. Outline Program Output

 2000 Prentice Hall, Inc. All rights reserved. 16.6Animating a Series of Images Class Timer –Generates ActionEvents at a fixed interval in milliseconds –Constructor: Timer ( animationDelay, actionListener ); actionListener - ActionListener that will respond to ActionEvents –Methods start stop restart isRunning

 2000 Prentice Hall, Inc. All rights reserved. 16.6Animating a Series of Images Method repaint –Calls update, which calls paintComponent Subclasses of JComponent should use paintComponent Call superclass paintComponent first to display components properly 30 super.paintComponent( g );

 2000 Prentice Hall, Inc. All rights reserved. 16.6Animating a Series of Images View area –Width and height specify entire window, not just client area Client area - where components can be displayed –Dimension objects Constructor –Dimension( width, height ) Contains width and height instance variables –Method setSize( width, height ) Class JFrame Sets size of window

 2000 Prentice Hall, Inc. All rights reserved. 16.6Animating a Series of Images getImageLoadStatus –ImageIcon method Determines if image is completely loaded into memory Only complete images should be displayed (smooth animation) –If loaded, returns MediaTracker.COMPLETE –MediaTracker Can determine when images are loaded, or force program to wait ImageIcon creates our MediaTracker for us 32 if ( images[ currentImage ].getImageLoadStatus() == 33 MediaTracker.COMPLETE ) {

 2000 Prentice Hall, Inc. All rights reserved. 16.6Animating a Series of Images Following example –Use a series of images stored in an array –Use Timer to generate ActionEvent s Change image displayed Update content pane

 2000 Prentice Hall, Inc. All rights reserved. Outline 1.1 Class LogoAnimator ( implements ActionListener ) 1.2 Declare objects 1.3 Constructor 1.4 Initialize ImageIcon array 2. paintComponent 2.1 super. paint Component 1// Fig. 16.3: LogoAnimator.java 2// Animation a series of images 3import java.awt.*; 4import java.awt.event.*; 5import javax.swing.*; 6 7public class LogoAnimator extends JPanel 8 implements ActionListener { 9 protected ImageIcon images[]; 10 protected int totalImages = 30, 11 currentImage = 0, 12 animationDelay = 50; // 50 millisecond delay 13 protected Timer animationTimer; public LogoAnimator() 16 { 17 setSize( getPreferredSize() ); images = new ImageIcon[ totalImages ]; for ( int i = 0; i < images.length; ++i ) 22 images[ i ] = new ImageIcon( "images/deitel" + i + ".gif" ); startAnimation(); 26 } public void paintComponent( Graphics g ) 29 { super.paintComponent( g ); 31 Load array of ImageIcon s to use for the animation. Call to superclass paintComponent ensures proper display.

 2000 Prentice Hall, Inc. All rights reserved. Outline 2.2 getImage LoadStatus 2.3 Increment currentImage 3. actionPerformed 3.1 startAnimation 3.2 stopAnimation 32 if ( images[ currentImage ].getImageLoadStatus() == 33 MediaTracker.COMPLETE ) { 34 images[ currentImage ].paintIcon( this, g, 0, 0 ); currentImage = ( currentImage + 1 ) % totalImages; 36 } 37 } public void actionPerformed( ActionEvent e ) 40 { 41 repaint(); 42 } public void startAnimation() 45 { 46 if ( animationTimer == null ) { 47 currentImage = 0; animationTimer = new Timer( animationDelay, this ); 49 animationTimer.start(); 50 } 51 else // continue from last image displayed if ( ! animationTimer.isRunning() ) 53 animationTimer.restart(); 54 } public void stopAnimation() 57 { 58 animationTimer.stop(); 59 } 60 Check if the image has loaded, and if so, increment currentImage. Create new Timer, start. this applet listed as event handler. If animationTimer is not running (i.e. user switched web pages and returned), restart it.

 2000 Prentice Hall, Inc. All rights reserved. Outline 3.3 getMinimumSize 3.4. getPreferredSize 4. main 61 public Dimension getMinimumSize() 62 { 63 return getPreferredSize(); 64 } public Dimension getPreferredSize() 67 { 68 return new Dimension( 160, 80 ); 69 } public static void main( String args[] ) 72 { 73 LogoAnimator anim = new LogoAnimator(); JFrame app = new JFrame( "Animator test" ); 76 app.getContentPane().add( anim, fBorderLayout.CENTER ); app.addWindowListener( 79 new WindowAdapter() { 80 public void windowClosing( WindowEvent e ) 81 { 82 System.exit( 0 ); 83 } 84 } 85 ); 86

 2000 Prentice Hall, Inc. All rights reserved. Outline Program Output 87 // The constants 10 and 30 are used below to size the 88 // window 10 pixels wider than the animation and 89 // 30 pixels taller than the animation. 90 app.setSize( anim.getPreferredSize().width + 10, 91 anim.getPreferredSize().height + 30 ); 92 app.show(); 93 } 94}

 2000 Prentice Hall, Inc. All rights reserved. 16.7Animation Issues Storing images –Interlaced/non-interlaced formats Specifies order in which pixels are stored Non-interlaced - pixels stored in order they appear on screen –Image appears in chunks from top to bottom as it is loaded Interlaced - pixels stored in rows, but out of order –Image appears to fade in and become more clear

 2000 Prentice Hall, Inc. All rights reserved. 16.7Animation Issues Animation flickers –Due to update being called in response to repaint –In AWT GUI components Draws filled rectangle in background color where image was Draw image, sleep, clear background (flicker), draw next image... –Swing's JPanel overrides update to avoid this

 2000 Prentice Hall, Inc. All rights reserved. 16.7Animation Issues Double buffering –Used to smooth animations –Program renders one image on screen Builds next image in off-screen buffer –When time to display next image, done smoothly Partial images user would have seen (while image loads) are hidden All pixels for next image displayed at once –Space/Time tradeoff Reduces flicker, but can slow animation speed and uses more memory –Used by Swing GUI components by default

 2000 Prentice Hall, Inc. All rights reserved. 16.8Customizing Applets via the HTML param Tag Applets –Customize through parameters in HTML file that invokes it –Invokes applet LogoApplet –param tags Each has a name and a value Use Applet method getParameter (returns a String ) parameter = getParameter( "animationdelay" );

 2000 Prentice Hall, Inc. All rights reserved. 16.8Customizing Applets via the HTML param Tag Following example –Use the LogoAnimator class as before, but modified slightly Include constructor to specify delay, name, number of images –Create Applet LogoApplet Takes parameters –totalimages –imagename –animationdelay –Create LogoAnimator object using parameters (use new constructor) –Play animation

 2000 Prentice Hall, Inc. All rights reserved. Outline 1. LogoAnimator class as before, but with new constructor getParameter 1.2 LogoAnimator 7public class LogoAnimator extends JPanel 8 implements ActionListener { public LogoAnimator( int num, int delay, String name ) 127import java.awt.*; 128import javax.swing.*; public class LogoApplet extends JApplet{ 131 public void init() 132 { 133 String parameter; parameter = getParameter( "animationdelay" ); 136 int animationDelay = ( parameter == null ? 50 : 137 Integer.parseInt( parameter ) ); String imageName = getParameter( "imagename" ); parameter = getParameter( "totalimages" ); 142 int totalImages = ( parameter == null ? 0 : 143 Integer.parseInt( parameter ) ); // Create an instance of LogoAnimator 146 LogoAnimator animator; if ( imageName == null || totalImages == 0 ) 149 animator = new LogoAnimator(); 150 else animator = new LogoAnimator( totalImages, 152 animationDelay, imageName ); The LogoAnimator class now has a new constructor. Get parameters from HTML file, convert to integers. Create new LogoAnimator, use custom constructor if applicable.

 2000 Prentice Hall, Inc. All rights reserved. Outline 2. setSize 2.3 startAnimation Program Output setSize( animator.getPreferredSize().width, 155 animator.getPreferredSize().height ); 156 getContentPane().add( animator, BorderLayout.CENTER ); animator.startAnimation(); 159 } 160} Start the animation.

 2000 Prentice Hall, Inc. All rights reserved. 16.9Image Maps Image map –Image that has hot areas User can click to accomplish a task –Bubble help When mouse over particular point in screen, small message displayed in status bar In the following example –Load image containing several icons –Use event handler mouseMoved to find x-coordinate –Based on the x-coordinate, display a message

 2000 Prentice Hall, Inc. All rights reserved. Outline 1. Declare objects 2. init 2.1 addMouseListener 1// Fig. 16.7: ImageMap.java 2// Demonstrating an image map. 3import java.awt.*; 4import java.awt.event.*; 5import javax.swing.*; 6 7public class ImageMap extends JApplet { 8 private ImageIcon mapImage; 9 private int width, height; public void init() 12 { 13 addMouseListener( 14 new MouseAdapter() { 15 public void mouseExited( MouseEvent e ) 16 { 17 showStatus( "Pointer outside applet" ); 18 } 19 } 20 ); addMouseMotionListener( 23 new MouseMotionAdapter() { 24 public void mouseMoved( MouseEvent e ) 25 { showStatus( translateLocation( e.getX() ) ); 27 } 28 } 29 ); 30 Pass the x coordinate to translateLocation. This returns a String, which is passed to showStatus.

 2000 Prentice Hall, Inc. All rights reserved. Outline 2.2 Initialize ImageIcon 3. paint 4. translateLocation 31 mapImage = new ImageIcon( "icons2.gif" ); width = mapImage.getIconWidth(); 33 height = mapImage.getIconHeight(); 34 setSize( width, height ); 35 } public void paint( Graphics g ) 38 { 39 mapImage.paintIcon( this, g, 0, 0 ); 40 } public String translateLocation( int x ) 43 { 44 // determine width of each icon (there are 6) int iconWidth = width / 6; if ( x >= 0 && x <= iconWidth ) 48 return "Common Programming Error"; 49 else if ( x > iconWidth && x <= iconWidth * 2 ) 50 return "Good Programming Practice"; 51 else if ( x > iconWidth * 2 && x <= iconWidth * 3 ) 52 return "Performance Tip"; 53 else if ( x > iconWidth * 3 && x <= iconWidth * 4 ) 54 return "Portability Tip"; 55 else if ( x > iconWidth * 4 && x <= iconWidth * 5 ) 56 return "Software Engineering Observation"; 57 else if ( x > iconWidth * 5 && x <= iconWidth * 6 ) 58 return "Testing and Debugging Tip"; Determine width of mapimage. Determine width of each icon in image. Based on this, display a message.

 2000 Prentice Hall, Inc. All rights reserved. Outline Program Output return ""; 61 } 62}

 2000 Prentice Hall, Inc. All rights reserved Java Plug-In Web browsers –Many different browser versions –Most support Java 1.0 and 1.1, but few support Java 2 Inconsistent support of 1.1 –To use Java 2 in an applet, use the Java Plug-in Bypasses browser's Java support Installs complete version of Java Runtime Environment on user's computer Large file - ideal for corporate intranets and high-speed networks

 2000 Prentice Hall, Inc. All rights reserved Java Plug-In Using the Plug in with applets –The, and tags must be converted Must indicate that Plug-in should be used to execute applet –Java Plug-in 1.2 HTML Converter Performs conversion for us –Execution In install directory type java HTMLConverter Select file to convert and type of conversion

 2000 Prentice Hall, Inc. All rights reserved Internet and World Wide Web Resources Internet and web resources –Java Media Framework –Download and documentation: –javax.media API descriptions: jmf/forDevelopers/

 2000 Prentice Hall, Inc. All rights reserved Internet and World Wide Web Resources Downloadable image, audio, and video galleries –Test your multimedia programs