⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mediaframe.java

📁 用java做的一个播放器
💻 JAVA
字号:
package Media;

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.media.*;
import java.io.*;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2007</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class MediaFrame
    extends JFrame implements ActionListener,ControllerListener,ItemListener{
  JPanel contentPane;
  //AviParser aviParser=new AviParser();
  MenuBar menuBar1 = new MenuBar();
  Menu menuFile = new Menu("File");
  MenuItem menuFileExit = new MenuItem("Exit");
  Menu menuHelp = new Menu("Help");
  MenuItem menuHelpAbout = new MenuItem("About");
  JToolBar jToolBar = new JToolBar();
  JButton jButton1 = new JButton();
  JButton jButton2 = new JButton();
  JButton jButton3 = new JButton();
  JButton jButton4 = new JButton();
  ImageIcon image1 = new ImageIcon(Media.MediaFrame.class.getResource(
      "openFile.png"));
  ImageIcon image2 = new ImageIcon(Media.MediaFrame.class.getResource(
      "stop.png"));
  ImageIcon image3 = new ImageIcon(Media.MediaFrame.class.getResource(
      "NoLoop.png"));
  ImageIcon image4 = new ImageIcon(Media.MediaFrame.class.getResource(
      "help.png"));
  ImageIcon image5 = new ImageIcon(Media.MediaFrame.class.getResource(
      "start.png"));
  ImageIcon image6 = new ImageIcon(Media.MediaFrame.class.getResource(
      "Loop.png"));

  Label statusBar = new Label();

  MenuItem menuItem1 = new MenuItem("Open");
  MenuItem menuItem2 = new MenuItem("Stop/Start");
  CheckboxMenuItem menuItem3 = new CheckboxMenuItem("Loop",false);


  BorderLayout borderLayout1 = new BorderLayout();
  JPanel plCenter=new JPanel();
  Component screen = Box.createGlue();
  Component control = Box.createGlue();
  Player player;
  String str=new String();
  String name=new String();
  String currentDirectory;
  boolean loop = false,flag=false,stop=true,end=false;



  public MediaFrame() {
    addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent e){
        dispose();
      }
      public void windowClosed(WindowEvent e){
        if (player != null) player.close ();
        System.exit(0);
      }
    });
    try {
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      jbInit();
    }
    catch (Exception exception) {
      exception.printStackTrace();
    }
  }
  /**
   * Component initialization.
   *
   * @throws java.lang.Exception
   */
  private void jbInit() throws Exception {
    contentPane = (JPanel) getContentPane();
    contentPane.setLayout(borderLayout1);
    this.getContentPane().setBackground(SystemColor.control);
    setSize(new Dimension(400, 340));
    setTitle("java播放器");
    setVisible(true);
    statusBar.setText("欢迎使用本播放器!");

    menuItem1.addActionListener(this);
    menuItem2.addActionListener(this);
    menuItem3.addItemListener(this);

    menuFileExit.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent actionEvent) {
        jMenuFileExit_actionPerformed(actionEvent);
      }
    });

    menuHelpAbout.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent actionEvent) {
        jMenuHelpAbout_actionPerformed(actionEvent);
      }
    });

    jButton1.setMaximumSize(new Dimension(32, 32));
    jButton1.setMinimumSize(new Dimension(32, 32));
    jButton1.addActionListener(this);

    jButton2.setMaximumSize(new Dimension(32, 32));
    jButton2.setMinimumSize(new Dimension(32, 32));
    jButton2.addActionListener(this);

    jButton3.setMaximumSize(new Dimension(32, 32));
    jButton3.setMinimumSize(new Dimension(32, 32));
    jButton3.addActionListener(this);

    jButton4.setMaximumSize(new Dimension(32, 32));
    jButton4.setMinimumSize(new Dimension(32, 32));
    jButton4.addActionListener(this);

    menuBar1.add(menuFile);
    menuFile.add(menuItem1);
    menuFile.addSeparator();
    menuFile.add(menuItem2);
    menuFile.addSeparator();
    menuFile.add(menuItem3);
    menuFile.addSeparator();
    menuFile.add(menuFileExit);
    menuBar1.add(menuHelp);
    menuHelp.add(menuHelpAbout);
    setMenuBar(menuBar1);
    jButton1.setIcon(image1);
    jButton1.setToolTipText("Open");
    jButton2.setIcon(image2);
    jButton2.setToolTipText("Stop/Start");
    jButton3.setIcon(image3);
    jButton3.setToolTipText("Loop");
    jButton4.setIcon(image4);
    jButton4.setToolTipText("Help");

    jToolBar.add(jButton1);
    jToolBar.add(jButton2);
    jToolBar.add(jButton3);
    jToolBar.add(jButton4);

    contentPane.add(jToolBar, java.awt.BorderLayout.NORTH);
    contentPane.add(statusBar, java.awt.BorderLayout.SOUTH);
    contentPane.add(plCenter,"Center");
    plCenter.setLayout(new BorderLayout());
    menuItem3.setEnabled(false);
  }

  /**
   * File | Exit action performed.
   *
   * @param actionEvent ActionEvent
   */
  void jMenuFileExit_actionPerformed(ActionEvent actionEvent) {
    dispose();
    System.exit(0);
  }


  /**
   * Help | About action performed.
   *
   * @param actionEvent ActionEvent
   */
  void jMenuHelpAbout_actionPerformed(ActionEvent actionEvent) {
    Toolkit.getDefaultToolkit().beep();
    JOptionPane.showMessageDialog(this,"本软件制作于2007年7月","关于本软件",1);
  }

  public void itemStateChanged(ItemEvent e){
    loop=!loop;
    if(loop==false){
      jButton3.setIcon(image3);
      statusBar.setText("已退出循环!");
      menuItem3.setState(false);
    }
    else{
      jButton3.setIcon(image6);
      menuItem3.setState(true);
      if (stop == true)
        statusBar.setText("循环开启.");
      else
        statusBar.setText("循环播放:" + name);
      }
  }

  public void actionPerformed(ActionEvent e){
    Object o=e.getSource();
    if(o==menuItem1||o==jButton1){
      //如果用jFileChooser, 多次打开文件时JVM容易出错
      FileDialog fd = new FileDialog (this, "打开媒体文件", FileDialog.LOAD);
      fd.setDirectory (currentDirectory);
      fd.setVisible(true);
      // 如果用户放弃选择文件,则返回
      if (fd.getFile()== null) { Toolkit.getDefaultToolkit().beep();return;}
      currentDirectory = fd.getDirectory ();
      name=fd.getFile();//若放到line188以前,那么带开不选文件就出导致name=null

      if (player != null)
      player.close ();
      try{player = Manager.createPlayer(new MediaLocator("file:/"+fd.getDirectory()+name));}
      catch(IOException eo){
      JOptionPane.showMessageDialog(this,"程序发生IOException例外","错误",0);return;}
      catch(NoPlayerException ep){
        Toolkit.getDefaultToolkit().beep();
        JOptionPane.showMessageDialog(this,"请选择音频或视频格式的文件","帮助",1);
        statusBar.setText("请选择文件!");
        player=null;
        return;}
      player.addControllerListener(this);
      player.prefetch();
      menuItem3.setEnabled(true);
    }

    if((o==menuItem2||o==jButton2)&&player!=null){
      if(stop==false){
        jButton2.repaint();
        jButton2.setIcon(image5);
        jButton2.setToolTipText("Start");
        player.stop();
        statusBar.setText(name+"已经暂停.");
        stop=true;end=false;
      }
      else{
        jButton2.setIcon(image2);
        jButton2.setToolTipText("Stop");
        if(end==true){
          player.setMediaTime(new Time (0));
          player.start ();
          statusBar.setText("正在播放:" + name);
           stop=false;
           return ;
        }
        else {player.start();}
        if(loop==true){statusBar.setText("循环播放:" + name);}
        else statusBar.setText("正在播放:" + name);
        stop=false;
      }
    }

    if(o==jButton3&&player!=null){
      loop=!loop;
      if(loop==false){
        jButton3.setIcon(image3);
        statusBar.setText("已退出循环!");
      }
      else{
        jButton3.setIcon(image6);
        if (stop == true)
          statusBar.setText("循环开启.");
        else
          statusBar.setText("循环播放:" + name);
      }
    }

    if(o==jButton4){
      jMenuHelpAbout_actionPerformed(e);
    }
  }

  public void controllerUpdate(ControllerEvent e){

    if (e instanceof ControllerClosedEvent) {
        flag=true;loop=false;end=false;
        if (screen != null) {
           plCenter.remove(screen);
            screen = null;
        }
        if (control != null) {
           plCenter.remove(control);
            control = null;
        }
        return;
    }

    if (e instanceof EndOfMediaEvent) {
      if(loop) {
          player.setMediaTime (new Time (0));
          player.start ();
          statusBar.setText("循环播放:"+name);
          return ;
      }
      statusBar.setText(name+"已结束!");
      jButton2.setIcon(image5);
      jButton2.setToolTipText("Start");
      stop=true;end=true;
      return;
    }

    if (e instanceof PrefetchCompleteEvent) {
        player.start();
        stop=false;
        return;
    }

    if (e instanceof RealizeCompleteEvent) {
        if (end==false||flag==true) {
          if(flag==true)
            {jButton2.setIcon(image2);
            jButton3.setIcon(image3);}
          screen = player.getVisualComponent();
          if (screen != null)
            plCenter.add(screen);
          control = player.getControlPanelComponent();
          if (control != null)
            plCenter.add(control, "South");
          pack();
          statusBar.setText("正在播放:" + name);
          flag=false;stop=true;loop=false;
        }
      }
    }


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -