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

📄 jmfplayer.java

📁 一个用Java语言写的媒体播放器程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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("关闭")) {
			    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 ("关于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("关闭"));
		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("自动循环");
		cbAutoLoop.setState(false);
		mnOptions.add(cbAutoLoop);
		
		// Help Menu
		Menu mnHelp = new Menu("帮助");
		mnHelp.add(item = new MenuItem("关于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; 	    
     		} 	    

⌨️ 快捷键说明

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