Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java SE 综合讨论区  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 求助~!请帮我分析下面的CODE块
22750124





发贴: 17
积分: 0
于 2005-12-15 23:33 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
package mediaplayer;

import java.awt.*;
import java.awt.event.*;
import java.io.*;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.plaf.basic.*;
import javax.media.*;

/**
*
* @author 权威
* @function AMP媒体播放器
* @version 1.0
* @date 2005-12-9
*
*/

public class AMP
extends Frame
implements ActionListener,ItemListener,ControllerListener{

  private File oldFile,newFile;
  private BasicDirectoryModel bdm;
  private String[] s;
  private Player player;
  private Component visualcomponent,controlcomponent;
  private boolean firstState=true,loopState=false;
  private String currentDirectory;

  private AMPMenuBar mb=new AMPMenuBar();

  public AMP(String s) {
    super(s);
    //给菜单栏中加监听器
    mb.open.addActionListener(this);
    mb.exit.addActionListener(this);
    mb.loop.addActionListener(this);
    mb.aboutAMP.addActionListener(this);

    //将菜单栏加入窗体中
    this.setMenuBar(mb);
    this.addWindowListener(

        new WindowAdapter(){

          public void windowClosing(WindowEvent e){
            dispose();
            //这里没有用System.exit(0)
            //因为用户点击关闭按钮调用dispose()
            //以执行windowClosed
          }

          public void windowClosed(WindowEvent e){
            //关闭未关闭的player
            if(player!=null){
              player.close();
              bdm.renameFile(newFile,oldFile);
            }
            System.exit(0);
          }
        });

    this.setSize(500,300);
    this.setVisible(true);
  }

  public void actionPerformed(ActionEvent e){

    if(e.getActionCommand().equals("退出")){
      //调用dispose()以便执行windowClosed
      dispose();
      return;
    }

    if(e.getActionCommand().equals("关于 AMP 1.0 播放器")){
      JDialog jd=new JDialog(this,"关于 AMP 1.0 播放器",true);
      jd.getContentPane().add(new JLabel(" 欢迎您使用 AMP1.0 播放器"));
      jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
      jd.setSize(200,100);
      jd.setVisible(true);
    }

    if(e.getActionCommand().equals("打开...")){
      FileDialog openFD=new FileDialog(
          this,"打开媒体文件",FileDialog.LOAD);
      openFD.setDirectory(currentDirectory);
      openFD.setVisible(true);
      //如果用户放弃选择文件,则返回

      if(openFD.getFile()==null){
        return;
      }

      currentDirectory=openFD.getDirectory();

      if(player!=null){
        player.close();
        bdm.renameFile(newFile,oldFile);
      }

      JFileChooser openFile=new JFileChooser(currentDirectory);
      bdm=new BasicDirectoryModel(openFile);
      s=openFD.getFile().split("\\.");
      oldFile=new File(currentDirectory+openFD.getFile());
      newFile=new File(currentDirectory+s[0]+".mpg");

      //创建player
      try{
        if(bdm.renameFile(oldFile,newFile)){
          player=Manager.createPlayer(
              new MediaLocator(
                  "file:"+openFD.getDirectory()+
                  s[0]+".mpg"));
        }
      }catch(IOException ioe){
        System.err.println(ioe);
        bdm.renameFile(newFile,oldFile);
        return;
      }catch(NoPlayerException npe){
        System.err.println("不支持的格式");
        bdm.renameFile(newFile,oldFile);
        return;
      }

      if(player==null){
        System.out.println("无法创建播放器");
        bdm.renameFile(newFile,oldFile);
        return;
      }

      firstState=false;
      this.setTitle(openFD.getFile());
      player.addControllerListener(this);
      //player加载
      player.prefetch();
    }
  }

  public void itemStateChanged(ItemEvent e){
    //设置loopState的value
    loopState=!loopState;
  }

  public void controllerUpdate(ControllerEvent e){

    //调用player.close()时ControllerClosedEvent事件出现
    //如果存在视觉部件,则该部件应该拆除(为一致起见,
    //我们对控制面板部件也执行同样的操作)

    if(e instanceof ControllerClosedEvent){

      if(visualcomponent!=null){
        remove(visualcomponent);
        visualcomponent=null;
      }

      if(controlcomponent!=null){
        remove(controlcomponent);
        controlcomponent=null;
      }

      return;
    }

    if(e instanceof EndOfMediaEvent){
      //结束时的循环处理
      if(loopState){
        player.setMediaTime(new Time(0));
        player.start();
      }

      return;
    }

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

    if(e instanceof RealizeCompleteEvent){

      visualcomponent=player.getVisualComponent();

      if(visualcomponent!=null){
        add(visualcomponent);
      }

      controlcomponent=player.getControlPanelComponent();

      if(controlcomponent!=null){
        add(controlcomponent,BorderLayout.SOUTH);
      }

      this.pack();
    }
  }

  public void paint(Graphics g){

    if(firstState){

      int width=this.getSize().width;
      int height=this.getSize().height;

      g.setColor(new Color(142,176,219));
      g.fillRect(0,0,width,height);

      Font f=new Font("DialogInput",Font.BOLD,26);
      g.setFont(f);

      FontMetrics fm=g.getFontMetrics();
      int swidth=fm.stringWidth("☆☆☆ 欢迎 ☆☆☆");

      g.setColor(Color.BLACK);
      g.drawString("☆☆☆ 欢迎 ☆☆☆",
          (width-swidth)/2,
          (height+this.getInsets().top)/2);
    }

      //调用超类JFrame的paintComponent(),
      //该paintComponent()方法将调用JFrame包含的各个容器具
      //和部件(包括控制面板部件)的paintComponent方法

    super.paint(g);
  }

  //不执行背景清除操作,以免控制面板部件闪烁
  public void update(Graphics g){
    paint(g);
  }

  /**
   * @param args
   */

  public static void main(String[] args) {
    new AMPJprogressBar("AMP 1.0 媒体播放器");
    new AMP("AMP 1.0 媒体播放器");
  }

}
为什么在连打开媒体文件后,会有部分媒体文件的名字没有被改回。仍为*.mpg


why edited on 2005-12-16 05:45


JBuilder使用技巧

话题树型展开
人气 标题 作者 字数 发贴时间
5440 求助~!请帮我分析下面的CODE块 22750124 10901 2005-12-15 23:33
4599 Re:求助~!请帮我分析下面的CODE块 ftang 440 2005-12-16 04:27
4174 Re:求助~!请帮我分析下面的CODE块 22750124 6 2005-12-17 19:36

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923