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

📄 mediaplayer.java

📁 小型的音乐播放器源码
💻 JAVA
字号:
import javax.media.*; 
import java.awt.*; 
import java.awt.event.*; 
class MediaPlayer extends Frame implements ActionListener, ControllerListener, ItemListener{ 
	Player player; 
	Component vc, cc; 
	boolean first = true, loop = false; 
	String currentDirectory; 
	MediaPlayer (String title) 
	{ 
		super (title); 
		addWindowListener(
			new WindowAdapter (){ 
				public void windowClosing (WindowEvent e){
					// 用户点击窗口系统菜单的关闭按钮
					// 调用dispose以执行windowClosed
					dispose ();
				}
				public void windowClosed (WindowEvent e){
					if (player != null) player.close ();
					System.exit (0);
				}
			});
		Menu file= new Menu ("文件");
		MenuItem open = new MenuItem ("打开");
		open.addActionListener (this);
		file.add (open);
		file.addSeparator ();
		CheckboxMenuItem auto = new CheckboxMenuItem ("循环", false);
		auto.addItemListener (this);
		file.add (auto);
		file.addSeparator ();
		open = new MenuItem ("退出");
		open.addActionListener (this);
		file.add (open);
		MenuBar mb = new MenuBar ();
		mb.add (file);
		setMenuBar (mb);
		setSize (400, 400);
		setVisible (true);
	} 
	public void actionPerformed (ActionEvent e){
		if (e.getActionCommand ().equals ("退出")){
			// 调用dispose以便执行windowClosed 
			dispose ();
			return;
		}
		FileDialog fd = new FileDialog (this, "打开媒体文件",FileDialog.LOAD);
		fd.setDirectory (currentDirectory);
		fd.show ();
		// 如果用户放弃选择文件,则返回
		if (fd.getFile () == null) return;
		currentDirectory = fd.getDirectory ();
		if (player != null)
			player.close ();
		try{
			player = Manager.createPlayer (new MediaLocator("file:" + fd.getDirectory () + fd.getFile ()));
		}
		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 (fd.getFile ());
		player.addControllerListener (this);
		player.prefetch ();
	}
	public void controllerUpdate (ControllerEvent e){
	// 调用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;
	} 
	if (e instanceof RealizeCompleteEvent){
		vc = player.getVisualComponent ();
		if (vc != null)
			add (vc);
		cc = player.getControlPanelComponent ();
		if (cc != null) 
			add (cc, BorderLayout.SOUTH);
		pack ();
		}
	}
	public void itemStateChanged (ItemEvent e){
		loop = !loop;
	}
	public void paint (Graphics 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, 16);
			g.setFont (f);
			FontMetrics fm = g.getFontMetrics ();
			int swidth = fm.stringWidth ("*** 欢迎 ***\n 李浩然 0510312105");
			g.setColor (Color.white);
			g.drawString ("     *** 欢迎 ***",(w - swidth) / 2,(h + getInsets ().top) / 2);
			g.drawString ("   李浩然 0510312105",(w - swidth) / 2,((h + getInsets ().top) / 2)+50);
		} 
		// 调用超类Frame的paint()方法,该paint()方法将调用Frame包含的各个容器 
		// 和部件(包括控制面板部件)的paint()方法。
		super.paint (g); 
	}
	// 不执行背景清除操作,以免控制面板部件闪烁
	public void update (Graphics g){
		paint (g);
	}
	public static void main (String [] args) 
	{ 
		new MediaPlayer ("影音播放器1.0"); 
	} 
} 

⌨️ 快捷键说明

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