ControlQueryPApplet.java Source code

Java tutorial

Introduction

Here is the source code for ControlQueryPApplet.java

Source

/*
    
Java Media APIs: Cross-Platform Imaging, Media and Visualization
Alejandro Terrazas
Sams, Published November 2002, 
ISBN 0672320940
*/

/*******************************************************************************
 * A "Bare Bones" Player Applet (BBP Applet) that will play the media object
 * indicated in the "media2Play" property of the Applet tag.
 * 
 * <p>
 * The applet demonstrates the relative ease with which the JMF can be employed,
 * particularly for playing. The applet a minimal player, placing the controls
 * for the player and the visual component for the played object within the
 * Applet. The object plays once, but can be controlled by the user through the
 * control panel provided.
 * 
 * <p>
 * The tag for the Applet should look something like:
 * 
 * <!-- Sample HTML <applet code="BBPApplet.class" width=300 height=400> <param
 * name="media2Play" value="myVideo.mpg"> </applet> -->
 * 
 * @author Spike Barlow
 ******************************************************************************/

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.util.*;
import javax.media.*;
import javax.media.control.*;

public class ControlQueryPApplet extends Applet implements ControllerListener {

    /***************************************************************************
     * Object to play the media. Only attribute that the Applet really needs.
     **************************************************************************/
    protected Player player;

    /***************************************************************************
     * The name of the media to be played.
     **************************************************************************/
    protected String nameOfMedia2Play;

    /***************************************************************************
     * Name of the Property field within the applet tage indicating the name of
     * the media to play.
     **************************************************************************/
    private static final String MEDIA_NAME_PROPERTY = "media2Play";

    /***************************************************************************
     * Object describing the location of the media to be played.
     **************************************************************************/
    protected MediaLocator locator;

    protected SystemTimeBase timer;

    /***************************************************************************
     * Initialise the applet by attempting to create and start a Player object
     * capable of playing the media specified in the applet tag.
     **************************************************************************/
    public void init() {

        setLayout(new BorderLayout());
        setBackground(Color.lightGray);
        try {
            nameOfMedia2Play = (new URL(getDocumentBase(), getParameter(MEDIA_NAME_PROPERTY))).toExternalForm();
            locator = new MediaLocator(nameOfMedia2Play);
            Manager.setHint(Manager.PLUGIN_PLAYER, new Boolean(true));
            player = Manager.createPlayer(locator);
            player.addControllerListener(this);
            timer = new SystemTimeBase();
            player.start();
        } catch (Exception e) {
            throw new Error("Couldn't initialise BBPApplet: " + e.getMessage());
        }
    }

    /***************************************************************************
     * Respond to ControllerEvents from the Player that was created. For the
     * bare bones player the only event of import is the RealizeCompleteEvent.
     * At that stage the visual component and controller for the Player can
     * finally be obtained and thus displayed.
     **************************************************************************/
    public synchronized void controllerUpdate(ControllerEvent e) {

        if (e instanceof RealizeCompleteEvent) {
            Control[] allControls = player.getControls();
            System.out.println("" + allControls.length + " controls for a Player @ REALIZED:");
            for (int i = 0; i < allControls.length; i++)
                System.out.println("" + (i + 1) + ": " + allControls[i]);
            add(player.getVisualComponent(), "North");
            add(player.getControlPanelComponent(), "South");
            validate();
        } else if (e instanceof StartEvent) {
            Control[] allControls = player.getControls();
            System.out.println("" + allControls.length + " controls for a Player @ START:");
            Panel panel = new Panel();
            for (int i = 0; i < allControls.length; i++) {
                System.out.println("" + (i + 1) + ": " + allControls[i]);
                Component cont = allControls[i].getControlComponent();
                if (cont != null) {
                    System.out.println("Has a graphical component");
                    panel.add(cont);
                }
            }
            panel.validate();
            add(panel, "Center");
            validate();
            FrameGrabbingControl frameControl = (FrameGrabbingControl) player
                    .getControl("javax.media.control.FrameGrabbingControl");
            if (frameControl == null)
                System.out.println("Unable to obtain FrameRateControl");
            else {
                System.out.println("Have Frame Rate control");
                panel.add(frameControl.getControlComponent());
                panel.validate();
            }

        }

    }

}