Choose the media they wish to play : 媒体 « 图形用户界面 « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » 图形用户界面 » 媒体屏幕截图 
Choose the media they wish to play
Choose the media they wish to play

/*

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

import java.awt.*;
import java.awt.event.*;
import javax.media.*;
import javax.media.protocol.*;
import javax.media.control.*;
import java.io.*;

/*******************************************************************************
 * A Graphical application allowing the user to choose the media they wish to
 * play. PlayerOfMedia presents a Dialog in which the user may enter the URL of
 * the media to play, or select a file from the local system.
 
 @author Spike Barlow
 ******************************************************************************/
public class PlayerOfMedia extends Frame implements ActionListener,
    ControllerListener {

  /** Location of the media. */
  MediaLocator locator;

  /** Player for the media */
  Player player;

  /** Dialog for user to select media to play. */
  Dialog selectionDialog;

  /** Buttons on user dialog box. */
  Button cancel, open, choose;

  /** Field for user to enter media filename */
  TextField mediaName;

  /** The menus */
  MenuBar bar;

  Menu fileMenu;

  /** Dialog for informing user of errors. */
  Dialog errorDialog;

  Label errorLabel;

  Button ok;

  /** Graphical component for controlling player. */
  Component controlComponent;

  /** Graphical component showing what isbeing played. */
  Component visualComponent;

  /** Graphical component to show download progress. */
  Component progressBar;

  /** Sizes to ensure Frame is correctly sized. */
  Dimension controlSize;

  Dimension visualSize;

  int menuHeight = 50;

  /** Directory user last played a file from. */
  String lastDirectory = null;

  /** Flags indicating conditions for resizing the Frame. */
  protected static final int VISUAL = 1;

  protected static final int PROGRESS = 2;

  /***************************************************************************
   * Construct a PlayerOfMedia. The Frame will have the default title of
   * "Player of Media". All initial actions on the PlayerOfMedia object are
   * initiated through its menu (or shotcut key).
   **************************************************************************/
  PlayerOfMedia() {
    this("Player of Media");
  }

  /***************************************************************************
   * Construct a PlayerOfMedia. The Frame will have the title supplied by the
   * user. All initial actions on the PlayerOfMedia object are initiated
   * through its menu (or shotcut key).
   **************************************************************************/
  PlayerOfMedia(String name) {

    super(name);
    ///////////////////////////////////////////////////////////
    // Setup the menu system: a "File" menu with Open and Quit.
    ///////////////////////////////////////////////////////////
    bar = new MenuBar();
    fileMenu = new Menu("File");
    MenuItem openMI = new MenuItem("Open..."new MenuShortcut(
        KeyEvent.VK_O));
    openMI.setActionCommand("OPEN");
    openMI.addActionListener(this);
    fileMenu.add(openMI);
    MenuItem quitMI = new MenuItem("Quit"new MenuShortcut(KeyEvent.VK_Q));
    quitMI.addActionListener(this);
    quitMI.setActionCommand("QUIT");
    fileMenu.add(quitMI);
    bar.add(fileMenu);
    setMenuBar(bar);

    ///////////////////////////////////////////////////////
    // Layout the frame, its position on screen, and ensure
    // window closes are dealt with properly, including
    // relinquishing the resources of any Player.
    ///////////////////////////////////////////////////////
    setLayout(new BorderLayout());
    setLocation(100100);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        if (player != null) {
          player.stop();
          player.close();
        }
        System.exit(0);
      }
    });

    /////////////////////////////////////////////////////
    // Build the Dialog box by which the user can select
    // the media to play.
    /////////////////////////////////////////////////////
    selectionDialog = new Dialog(this, "Media Selection");
    Panel pan = new Panel();
    pan.setLayout(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();
    mediaName = new TextField(40);
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.gridwidth = 2;
    pan.add(mediaName, gbc);
    choose = new Button("Choose File...");
    gbc.ipadx = 10;
    gbc.ipady = 10;
    gbc.gridx = 2;
    gbc.gridwidth = 1;
    pan.add(choose, gbc);
    choose.addActionListener(this);
    open = new Button("Open");
    gbc.gridy = 1;
    gbc.gridx = 1;
    pan.add(open, gbc);
    open.addActionListener(this);
    cancel = new Button("Cancel");
    gbc.gridx = 2;
    pan.add(cancel, gbc);
    cancel.addActionListener(this);
    selectionDialog.add(pan);
    selectionDialog.pack();
    selectionDialog.setLocation(200200);

    ////////////////////////////////////////////////////
    // Build the error Dialog box by which the user can
    // be informed of any errors or problems.
    ////////////////////////////////////////////////////
    errorDialog = new Dialog(this, "Error"true);
    errorLabel = new Label("");
    errorDialog.add(errorLabel, "North");
    ok = new Button("OK");
    ok.addActionListener(this);
    errorDialog.add(ok, "South");
    errorDialog.pack();
    errorDialog.setLocation(150300);

    Manager.setHint(Manager.PLUGIN_PLAYER, new Boolean(true));
  }

  /***************************************************************************
   * React to menu selections (quit or open) or one of the the buttons on the
   * dialog boxes.
   **************************************************************************/
  public void actionPerformed(ActionEvent e) {

    if (e.getSource() instanceof MenuItem) {
      //////////////////////////////////////////////////
      // Quit and free up any player acquired resources.
      //////////////////////////////////////////////////
      if (e.getActionCommand().equalsIgnoreCase("QUIT")) {
        if (player != null) {
          player.stop();
          player.close();
        }
        System.exit(0);
      }
      /////////////////////////////////////////////////////////
      // User to open/play media. Show the selection dialog box.
      /////////////////////////////////////////////////////////
      else if (e.getActionCommand().equalsIgnoreCase("OPEN")) {
        selectionDialog.show();
      }
    }
    //////////////////////
    // One of the Buttons.
    //////////////////////
    else {
      /////////////////////////////////////////////////////////////
      // User to browse the local file system. Popup a file dialog.
      /////////////////////////////////////////////////////////////
      if (e.getSource() == choose) {
        FileDialog choice = new FileDialog(this, "Media File Choice",
            FileDialog.LOAD);
        if (lastDirectory != null)
          choice.setDirectory(lastDirectory);
        choice.show();
        String selection = choice.getFile();
        if (selection != null) {
          lastDirectory = choice.getDirectory();
          mediaName.setText("file://" + choice.getDirectory()
              + selection);
        }
      }
      ///////////////////////////////////////////////
      // User chooses to cancel opening of new media.
      ///////////////////////////////////////////////
      else if (e.getSource() == cancel) {
        selectionDialog.hide();
      }
      ///////////////////////////////////////////////////////
      // User has selected the name of the media. Attempt to
      // create a Player.
      ///////////////////////////////////////////////////////
      else if (e.getSource() == open) {
        selectionDialog.hide();
        createAPlayer(mediaName.getText());
      }
      ////////////////////////////////////////////
      // User has seen error message. Now hide it.
      ////////////////////////////////////////////
      else if (e.getSource() == ok)
        errorDialog.hide();
    }
  }

  /***************************************************************************
   * Attempt to create a Player for the media who's name is passed the the
   * method. If successful the object will listen to the new Player and start
   * it towards Realized.
   **************************************************************************/
  protected void createAPlayer(String nameOfMedia) {

    ////////////////////////////////////////////////////////////
    // If an existing player then stop listening to it and free
    // up its resources.
    ////////////////////////////////////////////////////////////
    if (player != null) {
      System.out.println("Stopping and closing previous player");
      player.removeControllerListener(this);
      player.stop();
      player.close();
    }

    ///////////////////////////////////////////////////////////
    // Use Manager class to create Player from a MediaLocator.
    // If exceptions are thrown then inform user and recover
    // (go no further).
    //////////////////////////////////////////////////////////
    locator = new MediaLocator(nameOfMedia);
    try {
      System.out.println("Creating player");
      player = Manager.createPlayer(locator);
    catch (IOException ioe) {
      errorDialog("Can't open " + nameOfMedia);
      return;
    catch (NoPlayerException npe) {
      errorDialog("No player available for " + nameOfMedia);
      return;
    }
    //////////////////////////////////////////////////////////
    // Player created successfully. Start listening to it and
    // realize it.
    //////////////////////////////////////////////////////////
    player.addControllerListener(this);
    System.out.println("Attempting to realize player");
    player.realize();
  }

  /***************************************************************************
   * Popup a dialog box informing the user of some error. The passed argument
   * isthe text of the message.
   **************************************************************************/
  protected void errorDialog(String errorMessage) {

    errorLabel.setText(errorMessage);
    errorDialog.pack();
    errorDialog.show();
  }

  /***************************************************************************
   * Resize the Frame (window) due to the addition or removal of Components.
   **************************************************************************/
  protected void resize(int mode) {
    //////////////////////////////////////////
    // Player's display and controls in frame.
    //////////////////////////////////////////
    if (mode == VISUAL) {
      int maxWidth = (intMath.max(controlSize.width, visualSize.width);
      setSize(maxWidth, controlSize.height + visualSize.height
          + menuHeight);
    }
    ////////////////////////////////
    // Progress bar (only) in frame.
    ////////////////////////////////
    else if (mode == PROGRESS) {
      Dimension progressSize = progressBar.getPreferredSize();
      setSize(progressSize.width, progressSize.height + menuHeight);
    }
    validate();
  }

  /***************************************************************************
   * React to events from the player so as to drive the presentation or catch
   * any exceptions.
   **************************************************************************/
  public synchronized void controllerUpdate(ControllerEvent e) {

    ///////////////////////////////////////
    // Events from a "dead" player. Ignore.
    ///////////////////////////////////////
    if (player == null)
      return;

    ////////////////////////////////////////////////////////////
    // Player has reached realized state. Need to tidy up any
    // download or visual components from previous player. Then
    // obtain visual and control components for the player,add
    // them to the screen and resize window appropriately.
    ////////////////////////////////////////////////////////////
    if (instanceof RealizeCompleteEvent) {
      ////////////////////////////////////////////////////
      // Remove any inappropriate Components from display.
      ////////////////////////////////////////////////////
      if (progressBar != null) {
        remove(progressBar);
        progressBar = null;
      }
      if (controlComponent != null) {
        remove(controlComponent);
        validate();
      }
      if (visualComponent != null) {
        remove(visualComponent);
        validate();
      }
      ///////////////////////////////////////////////////////
      // Add control and visual components for new player to
      // display.
      //////////////////////////////////////////////////////
      controlComponent = player.getControlPanelComponent();
      if (controlComponent != null) {
        controlSize = controlComponent.getPreferredSize();
        add(controlComponent, "Center");
      else
        controlSize = new Dimension(00);
      visualComponent = player.getVisualComponent();
      if (visualComponent != null) {
        visualSize = visualComponent.getPreferredSize();
        add(visualComponent, "North");
      else
        visualSize = new Dimension(00);
      //////////////////////////////////////////////////////////
      // Resize frame for new components and move to prefetched.
      //////////////////////////////////////////////////////////
      resize(VISUAL);
      System.out.println("Player is now pre-fetching");
      player.prefetch();
    }
    ////////////////////////////////////////////////////////////
    // Provide user with a progress bar for "lengthy" downloads.
    ////////////////////////////////////////////////////////////
    else if (instanceof CachingControlEvent
        && player.getState() <= Player.Realizing && progressBar == null) {
      CachingControlEvent cce = (CachingControlEvente;
      progressBar = cce.getCachingControl().getControlComponent();
      if (progressBar != null) {
        add(progressBar, "Center");
        resize(PROGRESS);
      }
    }
    ////////////////////////////////////////////////
    // Player initialisation complete. Start it up.
    ////////////////////////////////////////////////
    else if (instanceof PrefetchCompleteEvent) {
      System.out.println("Pre-fetching complete, now starting");
      player.start();
    }
    ///////////////////////////////////////////////////////
    // Reached end of media. Start over from the beginning.
    ///////////////////////////////////////////////////////
    else if (instanceof EndOfMediaEvent) {
      player.setMediaTime(new Time(0));
      System.out.println("End of Media - restarting");
      player.start();
    }
    //////////////////////////////////////////////////////////////
    // Some form of error. Free up all resources associated with
    // the player, don't listen to it anymore, and inform the
    // user.
    //////////////////////////////////////////////////////////////
    else if (instanceof ControllerErrorEvent) {
      player.removeControllerListener(this);
      player.stop();
      player.close();
      errorDialog("Controller Error, abandoning media");
    }

  }

  /***************************************************************************
   * Create a PlayerOfMedia object and pop it up on the screen for the user to
   * interact with.
   **************************************************************************/
  public static void main(String[] args) {

    PlayerOfMedia ourPlayer = new PlayerOfMedia();
    ourPlayer.pack();
    ourPlayer.setSize(200100);
    ourPlayer.show();
  }
}

           
       
Related examples in the same category
1. Java媒体:查找组件Java媒体:查找组件
2. 查询配置JMF查询配置JMF
3. Show the Location2Location class in actionShow the Location2Location class in action
4. 捕获音频或视频通过设备连接到PC
5. 做音频捕捉
6. 统计信息跟踪构成一个媒体对象
7. 播放媒体对象
8. 播放器:播放媒体对象
9. 播放媒体对象3
10. 列出所有撷取装置目前已知的JMF列出所有撷取装置目前已知的JMF
11. 传输媒体从一个位置到另一个位置
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.