📄 mediaplayer.java
字号:
package midiaplayer;
import java.awt.BorderLayout;
import java.awt.CheckboxMenuItem;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.FileDialog;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.ControllerClosedEvent;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.GainControl;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.RealizeCompleteEvent;
import javax.media.Time;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class MediaPlayer extends JFrame implements ActionListener,ControllerListener,ItemListener{
/**
*
*/
private static final long serialVersionUID = 1L;
Player player;
String currentDirectory;
Component vc, cc,gcc;
GainControl gc;
boolean first = true, loop = false;
MediaPlayer(String title){
super(title);
//利用一个adapter实现用户对窗口的关闭
//实时响应
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
//用dispose实行windowClose
dispose();
}
public void windowClosed(WindowEvent e){
if(player!=null)
player.close();
System.exit(0);
}
});
setupMenu();
setSize(400,400);
setVisible(true);
}
private void setupMenu() {
Menu menu=new Menu("文件");
MenuItem mi =new MenuItem("打开");
mi.addActionListener(this);
menu.add(mi);
menu.addSeparator();
CheckboxMenuItem chmi = new CheckboxMenuItem("循环",false);
chmi.addActionListener(this);
menu.add(chmi);
menu.addSeparator();
MenuItem miexit=new MenuItem("退出");
miexit.addActionListener(this);
menu.add(miexit);
Menu playCtrol=new Menu("播放控制");
MenuItem playmp3=new MenuItem("播放");
playmp3.addActionListener(this);
playCtrol.add(playmp3);
playCtrol.addSeparator();
MenuItem pause =new MenuItem("暂停");
pause.addActionListener(this);
playCtrol.add(pause);
playCtrol.addSeparator();
MenuItem stopplay= new MenuItem("停止");
stopplay.addActionListener(this);
playCtrol.add(stopplay);
playCtrol.addSeparator();
Menu playList =new Menu("播放列表");
MenuBar mb =new MenuBar();
mb.add(menu);
mb.add(playCtrol);
mb.add(playList);
setMenuBar(mb);
}
public void actionPerformed(ActionEvent e) {
String cufile,selectfile;
if(e.getActionCommand().equals("退出")){
JOptionPane.showMessageDialog(this,"您已退出xp播放器");
dispose();
return;
}
if(e.getActionCommand().equals("播放")){
if(player!=null){
player.start();
}
return;
}
if(e.getActionCommand().equals("暂停")){
if(player!=null){
player.stop();
}
return;
}
//停止命令的响应
if(e.getActionCommand().equals("停止")){
if(player!=null){
player.stop();
player.setMediaTime(new Time(0));
}
}
//用户选择要播放的文件
if(e.getActionCommand().equals("打开")){
FileDialog fd=new FileDialog(this,"打开媒体文件",FileDialog.LOAD);
fd.setDirectory(currentDirectory);
fd.show();
//如果用户放弃选择则返回
if(fd.getFile () == null){
return;
}
//保存所选的文件的名称其全部路径名称,以备稍后使用
selectfile=fd.getFile();
currentDirectory=fd.getDirectory();
cufile=currentDirectory+selectfile;
//将用户选择的文件作为一个菜单项加入播放列表
//被点击显示全路径没
MenuItem mi=new MenuItem(selectfile);
mi.setActionCommand(cufile);
MenuBar mb =getMenuBar();
//获取指定的菜单
Menu m= mb.getMenu(2);
mi.addActionListener(this);
m.add(mi);
}else{
//程序运行到此,说明用户选择了一个播放列表中的文件
//此时可以通过如下获得全路径名
cufile=e.getActionCommand();
selectfile=cufile;
}
//如果动作起源于播放列表菜单上
//如果已经存在一个播放器,则先将其关闭,稍后重新创建
//创建时需要捕捉异常
JOptionPane.showMessageDialog(this,"您已退出xp播放器");
if(player!=null){
JOptionPane.showMessageDialog(this,"您已退出xp播放器");
player.close();
try{
//创建一个播放器
player=Manager.createPlayer(new MediaLocator("file:"+cufile));
}catch(java.io.IOException e2){
System.out.println(e2);
return;
}
catch(NoPlayerException e2){
System.out.println("不能找到播放器");
return;
}
if(player==null){
System.out.println("无法创建播放器");
return;
}
first=false;
setTitle(selectfile);
player.addControllerListener(this);
player.prefetch();
}
}
public void itemStateChanged(ItemEvent e) {
loop=!loop;
}
//本方法用来处理媒体播放器传来的事件
public void controllerUpdate(ControllerEvent e) {
Container tainer=getContentPane();
/**
* 调用player.close()是controllerClosedEvent事件出现
* 如果存在视觉部件,则该部件拆除(为一致起见,我们归空间棉班不见也实行同样的操作下一次需要时再构造)
*/
if(e instanceof ControllerClosedEvent){
if(vc!=null){
remove(vc);
vc=null;
}
if(cc!=null){
remove(cc);
cc=null;
}
return;
}
//播放结束时,把播放指针放在文件之首,如果设定了循环播放,则再次开启
if(e instanceof EndOfMediaEvent){
if(loop){
player.setMediaTime(new Time(0));
player.start();
}
return;
}
if (e instanceof PrefetchCompleteEvent)
{
player.start ();
return;
}
//本事件用于资源已经确定;此时要将图形conponent显示出来,将对应的图象载入窗体
if(e instanceof RealizeCompleteEvent){
vc=player.getVisualComponent();
if(vc!=null)
tainer.add(vc,BorderLayout.CENTER);
//将对应控制器载入窗体
cc=player.getControlPanelComponent();
cc.setBackground(Color.BLUE);
if(cc!=null){
tainer.add(cc, BorderLayout.SOUTH);
}
//有一些媒体提供另外的控制手段,将该控制器一起加入
gc=player.getGainControl();
gcc=player.getControlPanelComponent();
if(gcc!=null){
tainer.add(gcc,BorderLayout.NORTH);
}
if(vc!=null){
pack();
return;
}else{
setSize(300,75);
setVisible(true);
return;
}
}
}
public void update(Graphics g){
paint(g);
}
public void paint(Graphics g){
super.paint (g);
if(first){
int w=getSize().width;
int h=getSize().height;
g.setColor(Color.black);
g.fillRect(0, 0, w, h);
Font f=new Font("DialogInput",Font.BOLD,18);
g.setFont(f);
FontMetrics fm =g.getFontMetrics();
g.setColor(Color.white);
int swidth=fm.stringWidth("小潘啵啵");
g.drawString("小潘啵啵", (w-swidth)/2,(h+getInsets().top)/2);
}
}
public static void main(String args[]){
MediaPlayer md=new MediaPlayer("xp");
md.setVisible(true);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -