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

📄 video.java

📁 IO流的项目好
💻 JAVA
字号:
//视频
package myQQ;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.media.*; //媒体包
import java.net.*;
import java.io.*;
import java.util.*;

class Video extends JPanel implements ActionListener,
ControllerListener,Runnable
{
	Image tem = Toolkit.getDefaultToolkit().getImage("QQ/skin/chat/dpt.png");
	ImageIcon ic1 = new ImageIcon("QQ/skin/chat/dv1.png");
	ImageIcon ic2 = new ImageIcon("QQ/skin/chat/dv2.png");
	JButton jb1 = new JButton(ic1);
	JButton jb2 = new JButton(ic2);
	JPanel jp = new JPanel(new FlowLayout(FlowLayout.RIGHT));
	Component vc; //视频播放组件
	Component cc; //视频播放控制组件
	File path = new File("QQ/video"); //存放音乐的目录
	boolean start = false; //控制线程
	boolean stop = false; 
	Thread t;
	
	Video()
	{
		this.setLayout(new BorderLayout());
		//按钮设置
		jb1.setToolTipText("播放");
		jb2.setToolTipText("停止");
		jb1.setMargin(new Insets(0,0,0,0));
		jb2.setMargin(new Insets(0,0,0,0));
		jb1.setBorder(null); //无边框
		jb2.setBorder(null);
		jb1.setContentAreaFilled(false); //透过内容窗格
		jb2.setContentAreaFilled(false);
		jp.add(jb1);
		jp.add(jb2);
		jp.setOpaque(false); //透明
		this.add(jp,BorderLayout.SOUTH);
		jp.setVisible(false); //隐藏控制面板
		jb1.addActionListener(this); //注册监听器
		jb2.addActionListener(this);
		jp.addMouseListener(new VM());
		this.addMouseListener(new VM());
	}
	
	public void paintComponent(Graphics g)
	{	//背景
		super.paintComponent(g);
		g.drawImage(tem,0,0,this.getWidth(),this.getHeight(),this);
		g.drawImage(Adom.imL,0,0,5,this.getHeight(),this); //边框
		g.drawImage(Adom.imR,this.getWidth()-5,0,5,this.getHeight(),this);
		g.drawImage(Adom.imT,0,0,this.getWidth(),5,this); //边框
		g.drawImage(Adom.imB,0,this.getHeight()-5,this.getWidth(),5,this);
	}
	
	public void actionPerformed(ActionEvent e)
	{	//按钮事件监听
		if(e.getSource()==jb1)
		{	//播放
			t = new Thread(this);
			t.start();
			stop = false;
		}
		if(e.getSource()==jb2)
		{	//停止
			this.stopAll();
			t = null; //置空线程
			this.removeC();
			this.updateUI();
			jb1.setEnabled(true);
		}
	}
	
	public void controllerUpdate(ControllerEvent e)
	{	//播放控制监听
		Player x = (Player)e.getSource();
		if(e instanceof PrefetchCompleteEvent)
		{	//完成获得数据后开始播放
			x.start();
			return ;
		}
		if(e instanceof EndOfMediaEvent)
		{	//正常播放结束
			x.deallocate(); //清除占有内存
			this.rePlay(); //播放下首曲子
			return ;
		}
		if(e instanceof RealizeCompleteEvent)
		{	//获得画面及控制组件
			vc = x.getVisualComponent();
			cc = x.getControlPanelComponent();
			if(vc!=null)
				this.add(vc);
			if(cc!=null)
				this.add(cc,BorderLayout.NORTH);
			this.updateUI();
			return ;
		}
	}
	
	public void run()
	{	//循环播放path目录中的音乐
		jb1.setEnabled(false);
		try {
			File[] f = path.listFiles();
			for (int i = 0; i<f.length; i++)
			{	//先移除原有组件
				this.removeC();
				//创建媒体播放对象
				Player p = Manager.createPlayer(new URL("file:"+f[i]));
				p.addControllerListener(this); //注册控制监听器
				p.prefetch(); //获取媒体数据
				start = true;
				synchronized(this)
				{	//同步
					while(start)
						wait();
					if(stop)
					{
						p.close();
						p.deallocate();
						break;
					}		
				}	
			}		
		}catch (Exception ex) {
		    	System.out.println (ex);
		}	
	}
	
	public synchronized void rePlay()
	{	//唤醒线程
		start = false;
		notify();
	}
	public synchronized void stopAll()
	{	//停止线程
		stop = true;
		start = false;
		notify();
	}
	
	public void removeC()
	{	//移除相应组件
		if(vc!=null)
		{
			this.remove(vc);
			vc = null;
		}
		if(cc!=null)
		{
			this.remove(cc);
			cc = null;
		}
	}
	
	/*
	 *注意:
 	 *鼠标移入移出面板时对子面板的按钮有影响,
 	 *故而也给子面板添加监听,以使按钮能正常操作
 	 */
	class VM extends MouseAdapter
	{	//控制面板显示
		public void mouseEntered(MouseEvent e)
		{
			jp.setVisible(true);	
		}
		public void mouseExited(MouseEvent e)
		{
			if(e.getSource()!=jp)
				jp.setVisible(false);
		}
	}
}

⌨️ 快捷键说明

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