?? jmfplayer.java
字號:
package lib.ydy;
import javax.media.*;
import com.sun.media.*;
import com.sun.media.controls.*;
import com.sun.media.ui.MessageBox;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
public class JMFPlayer extends Frame implements ControllerListener {
Player player = null;
Player newPlayer = null;
Component controlComp = null;
Component visualComp = null;
VideoSizingControl videoSizeControl = null;
Panel panel;
Panel framePanel;
FileDialog fd = null;
Insets insets;
Menu menu;
PopupMenu zoomMenu = null;
boolean windowCreated = false;
boolean newVideo = false;
boolean panelResized = false;
CheckboxMenuItem cbAutoPlay = null;
CheckboxMenuItem cbAutoLoop = null;
String filename = "Java Media Player";
Dimension scmSize = Toolkit.getDefaultToolkit().getScreenSize();
Image imgBack;
ImageArea areaImagePlaceholder = null;
int nImageWidth;
int nImageHeight;
static int windowCount = 0;
public JMFPlayer(Player player, String name) {
super("Java Media Player");
splashwnd();
if (name != null)
filename = name;
this.player = player;
windowCount++;
setProps();
MenuBar menubar = createMenuBar();
setMenuBar(menubar);
setLayout( new BorderLayout() );
framePanel = new Panel();
framePanel.setLayout( null );
add("Center", framePanel);
panel = new Panel();
panel.setLayout( new BorderLayout() );
setPlaceholder();
framePanel.add(panel);
nImageWidth = imgBack.getWidth(this);
nImageHeight = imgBack.getHeight(this);
int nWidth,nHeight;
insets = getInsets();
nWidth = insets.left + insets.right + nImageWidth;
nHeight = insets.top + insets.bottom + nImageHeight;
setSize( nWidth, nHeight );
setLocation(scmSize.width/2 - nWidth/2, scmSize.height/2 - nHeight/2 );
setVisible(true);
// panel.setBounds(0,0, nImageWidth, nImageHeight);
panel.setSize(nImageWidth, nImageHeight);
panel.setVisible(true);
addWindowListener( new WindowAdapter() {
public void windowClosing(WindowEvent we) {
killThePlayer();
dispose();
windowCount--;
if (windowCount == 0)
System.exit(0);
}
});
framePanel.addComponentListener( new ComponentAdapter() {
public void componentResized(ComponentEvent ce) {
panelResized = true;
}
} );
addComponentListener( new ComponentAdapter() {
public void componentResized(ComponentEvent ce) {
framePanel.invalidate();
doResize();
}
});
if (player != null) {
player.addControllerListener( this );
player.realize();
}
}
void setProps() {
Properties props = new Properties(System.getProperties());
props = new Properties(props);
File theUserPropertiesFile, theContentPropertiesFile;
String sep = File.separator;
theUserPropertiesFile = new File(System.getProperty("user.home") +
sep + ".hotjava" +
sep + "properties");
try {
FileInputStream in = new FileInputStream(theUserPropertiesFile);
props.load(new BufferedInputStream(in));
in.close();
} catch (Exception e) {
System.err.println("Error loading properties. Have you run hotjava or appletviewer before? If you wish to play http streams, please do so, and set the firewall proxy in the preferences, if necessary.");
}
System.setProperties(props);
}
private void sleep(long time) {
try {
Thread.currentThread().sleep(time);
} catch (Exception e) {
}
}
private MenuBar createMenuBar() {
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent ae) {
String command = ae.getActionCommand();
if (command.equals("打開")) {
if (fd == null) {
fd = new FileDialog(JMFPlayer.this, "打開多媒體文件",
FileDialog.LOAD);
fd.setDirectory("..");
}
fd.show();
if (fd.getFile() != null) {
String filename = fd.getDirectory() + fd.getFile();
openFile("file:" + filename);
}
} else if (command.equals("關(guān)閉")) {
killThePlayer();
setPlaceholder();
int nWidth,nHeight;
insets = getInsets();
nWidth = insets.left + insets.right + nImageWidth;
nHeight = insets.top + insets.bottom + nImageHeight;
setSize( nWidth, nHeight );
setVisible(true);
panel.setSize(nImageWidth, nImageHeight);
panel.setVisible(true);
} else if (command.equals("退出")) {
dispose();
windowCount--;
if (windowCount == 0)
System.exit(0);
} else if (command.equals ("關(guān)于MediaPlayer")) {
JOptionPane.showMessageDialog(null,
"MediaPlayer利用JMF框架制作,"+'\n'+
"支持mp3,au,avi,wav,mpg,midi,"+'\n'+
"QuickTime等格式."+'\n'+
"軟件0301班:楊道瑩()");
}
}
};
MenuItem item;
MenuBar mb = new MenuBar();
// File Menu
Menu mnFile = new Menu("文件");
mnFile.add(item = new MenuItem("打開"));
item.addActionListener(al);
mnFile.add(item = new MenuItem("關(guān)閉"));
item.addActionListener(al);
mnFile.addSeparator();
mnFile.add(item = new MenuItem("新窗口"));
item.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent ae) {
JMFPlayer jpnew = new JMFPlayer(null, null);
}
} );
mnFile.addSeparator();
mnFile.add(item = new MenuItem("退出"));
item.addActionListener(al);
// Options Menu
Menu mnOptions = new Menu("選項");
cbAutoPlay = new CheckboxMenuItem ("自動播放");
cbAutoPlay.setState(true);
mnOptions.add (cbAutoPlay);
cbAutoLoop = new CheckboxMenuItem("自動循環(huán)");
cbAutoLoop.setState(false);
mnOptions.add(cbAutoLoop);
// Help Menu
Menu mnHelp = new Menu("幫助");
mnHelp.add(item = new MenuItem("關(guān)于MediaPlayer"));
item.addActionListener(al);
this.menu = mnFile;
mb.add(mnFile);
mb.add(mnOptions);
mb.add(mnHelp);
return mb;
}
public void addNotify() {
super.addNotify();
windowCreated = true;
insets = getInsets();
validate();
}
public void doResize() {
Dimension d = framePanel.getSize();
int videoHeight = d.height;
if (controlComp != null)
{
videoHeight -= controlComp.getPreferredSize().height;
if (videoHeight < 2)
videoHeight = 2;
if (d.width < 160)
d.width = 160;
controlComp.invalidate();
}
panel.invalidate();
panel.setBounds(0, 0, d.width, d.height);
framePanel.validate();
if (videoSizeControl != null)
{
videoSizeControl.setVideoSize( new Dimension(d.width, videoHeight) );
}
}
public void killThePlayer()
{
if (player != null)
{
player.stop();
player.deallocate();
}
}
public synchronized void controllerUpdate(ControllerEvent ce)
{
if (ce instanceof RealizeCompleteEvent)
{
int width = 320;
int height = 0;
insets = getInsets();
Control [] controls;
panel.removeAll();
if ((controls = player.getControls()) != null)
{
int i;
for (i=0; i<controls.length; i++)
if (controls[i] instanceof VideoSizingControl)
{
videoSizeControl = (VideoSizingControl)controls[i];
}
}
if (( visualComp = player.getVisualComponent()) != null)
{
width = visualComp.getPreferredSize().width;
height = visualComp.getPreferredSize().height;
panel.add("Center", visualComp);
addPopupMenu(visualComp);
newVideo = true;
}
else
{
if ( areaImagePlaceholder != null ) {
panel.add ( "Center",areaImagePlaceholder );
}
}
if ((controlComp = player.getControlPanelComponent()) != null)
{
controlComp.setSize(width,controlComp.getPreferredSize().height);
height += controlComp.getPreferredSize().height;
panel.add("South", controlComp);
newVideo = true;
}
if (filename != null)
{
if (filename.indexOf("file:") == 0)
{
filename = filename.substring(5);
}
setTitle(filename);
}
player.prefetch();
}
else if (ce instanceof PrefetchCompleteEvent)
{
if (newVideo)
{
if (visualComp != null)
{
Dimension vSize = visualComp.getPreferredSize();
if (controlComp != null)
vSize.height += controlComp.getPreferredSize().height;
panelResized = false;
setSize(vSize.width + insets.left + insets.right,
vSize.height + insets.top + insets.bottom);
int waited = 0;
while (panelResized == false && waited < 2000)
{
try {
waited += 50;
Thread.currentThread().sleep(50);
Thread.currentThread().yield();
}
catch (Exception e) {}
}
}
else
{
int height = 1;
if (controlComp != null)
height = controlComp.getPreferredSize().height;
setSize(320+insets.left + insets.right,
height + insets.top + insets.bottom);
}
newVideo = false;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -