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