📄 video.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 + -