JMF示例(一)

import java.applet.Applet;
import java.awt.
* ;
import java.awt.
event . * ;
import java.lang.String;
import java.net.URL;
import java.net.MalformedURLException;
import java.io.File;
import java.io.IOException;
import java.util.Properties;
import javax.media.
* ;

import com.sun.media.
* ;

/* *
  * This is a Java Applet that demonstrates how to create a simple
  * media player with a media event listener. It will play the
  * media clip right away and continuously loop.
  * 
  * <!-- Sample HTML
  * <applet code=TVApplet width=587 height=510>
  * <param name=file value="sun.avi">
  * </applet>
  * -->
  
*/
public   class  TVApplet extends Applet implements ControllerListener 
{
    
private  String fileToPlay  =   "" ; // 要播放的文件(完整的路径名称)
    
//  media Player
    Player player  =   null ; // 播放器
    
//  component in which video is playing
    Component visualComponent  =   null ; // 可视组件
    
//  controls gain, position, start, stop
    Component controlComponent  =   null ; // 控制组件
    
//  displays progress during download
    Component progressBar  =   null ; // 进度条
long  CachingSize  =   0L ;  
    Panel panel 
=   null ;
    Panel vPanel 
=   null ;
    
int  controlPanelHeight  =   0 ;
    Image [] showmeImage 
=   null ;
    Image [] zoomImageUp 
=   null ;
    Image [] zoomImageDn 
=   null ;
    CPanel cPanel 
=   null ;
    ZoomButton zoomButton;
    
    final 
int  [] VLEFT  =  { 59 120 };
    final 
int  [] VTOP   =  { 33 67 };
    final 
int  [] VRIGHT  =  { 59   +   175 120   +   351 };
    final 
int  [] VBOTTOM  =  { 173 67   +   287   +   11 };
    final 
int  [] WIDTH  =  { 176 352 };
    final 
int  [] HEIGHT  =  { 138 288 };

    final 
int  HALF  =   0 ; // 小屏
    final  int  FULL  =   1 ; // 全屏

    
int  tSize  =   0 ;
    
    
/* *
     * Read the applet file parameter and create the media 
     * player.
     
*/
    
public   void  init() 
    {

    setLayout(
null );
    setBackground(Color.white);
    
    cPanel 
=   new  CPanel( );
    add(cPanel);

    
//  Figure out what size to use
    
//  The applet tag takes an optional parameter "SIZE" whose value
    
//  can be "half" or "full"
    
//  Eg. <param name=size value=half>
    
    String szSize 
=   " full "  ; // getParameter("SIZE");
    
// 屏幕一般是1024*768
     if  (Toolkit.getDefaultToolkit().getScreenSize().getWidth()  >   800 )
        tSize 
=   1 ;
    
else
        tSize 
=   0 ;
    
    
if  (szSize  !=   null )
    {
        
if  (szSize.toLowerCase().equals( " full " ))
            tSize 
=   1 ;
        
else   if  (szSize.toLowerCase().equals( " half " ))
            tSize 
=   0 ;
    }

    cPanel.setBounds(VLEFT[tSize], VTOP[tSize], WIDTH[tSize], HEIGHT[tSize]);
// 设置播放器上部分的窗口矩阵的位置

    
//  Get the images
    showmeImage  =   new  Image[FULL  +   1 ];
    zoomImageUp 
=   new  Image[FULL  +   1 ];
    zoomImageDn 
=   new  Image[FULL  +   1 ];
    
    showmeImage[HALF] 
=  getImage(getDocumentBase(),  " ShowMeS2.jpg " );
    showmeImage[FULL] 
=  getImage(getDocumentBase(),  " ShowMeS.jpg " );
    zoomImageUp[HALF] 
=  getImage(getDocumentBase(),  " InUp.gif " );
    zoomImageDn[HALF] 
=  getImage(getDocumentBase(),  " InDn.gif " );
    zoomImageUp[FULL] 
=  getImage(getDocumentBase(),  " OutUp.gif " );
    zoomImageDn[FULL] 
=  getImage(getDocumentBase(),  " OutDn.gif " );
    addZoomButton();

    
//  URL for our media file
    URL url  =   null ;

    
this .fileToPlay  =   " d://rr.mp3 " ;
    File fileToPlay 
=   new  File( this .fileToPlay);
    
try  
    {
        
//  Create an url from the file name and the url to the
        
//  document containing this applet.
         if  ((url  =  fileToPlay.toURL())  ==   null )
        Fatal(
" Can't build URL for  "   +   this .fileToPlay);
        
//  Create an instance of a player for this media
         try  
        {
            player 
=  Manager.createPlayer(url); // 创建播放器
        } 
        
catch  (NoPlayerException e) 
        {
        System.
out .println(e);
        Fatal(
" Could not create player for  "   +  url);
        }
        
//  Add ourselves as a listener for a player's events
        player.addControllerListener( this ); // 为播放器事件增加监听者 

    }
    
catch  (MalformedURLException e) 
    {
        Fatal(
" Invalid media file URL! " );
    }
    
catch  (IOException e) 
    {
        Fatal(
" IO exception creating player for  "   +  url);
    }
}

    
/* *
     * Start media file playback. This function is called the
     * first time that the Applet runs and every
     * time the user re-enters the page.
     
*/

    
public   void  start() 
    {
        
if  (player  !=   null )
            player.realize();
    }

    
/* *
     * Stop media file playback and release resource before
     * leaving the page.
     
*/
    
public   void  stop() 
    {
        
if  (player  !=   null )
        {
            player.stop();
            player.deallocate();
        }
    }

    
public   void  destroy() 
    {
        player.close();
    }

    
public   void  paint(Graphics g) 
    {
    
if  (showmeImage[tSize]  !=   null )
        g.drawImage(showmeImage[tSize], 
0 0 this );
    super.paint(g);
    }

    
public  synchronized  void  reSize() 
    {
    cPanel.setBounds(VLEFT[tSize], VTOP[tSize], WIDTH[tSize], HEIGHT[tSize]);
    
if  (visualComponent  !=   null ) {
        Dimension size 
=  visualComponent.getPreferredSize();
        
int  width  =  size.width;
        
int  height  =  size.height;

        
while  ( true ) {
        
//  Scale to fit
         if  (width  >  WIDTH[tSize]  ||  height  >  HEIGHT[tSize]) {
            width 
/=   2 ;
            height 
/=   2 ;
        } 
else   if  (width  <  WIDTH[tSize]  &&  height  <  HEIGHT[tSize]) {
            
if  (width  *   2   <=  WIDTH[tSize]  &&  height * 2   <=  HEIGHT[tSize]) {
            width 
*=   2 ;
            height 
*=   2 ;
            } 
else
            
break ;
        } 
else
            
break ;
        }
        visualComponent.setBounds((WIDTH[tSize] 
-  width)  /   2 ,
                      (HEIGHT[tSize] 
-  height)  /   2 ,
                      width, height);
    }
    
    
if  (controlComponent  !=   null ) {
        controlComponent.setBounds(VLEFT[tSize], VBOTTOM[tSize],
                       WIDTH[tSize], 
24 );
        controlComponent.invalidate();
    }
    
    remove(zoomButton);
    addZoomButton();
    repaint();
    }

    
public   void  addZoomButton()
    {
    zoomButton 
=   new  ZoomButton(zoomImageUp[tSize], zoomImageDn[tSize],  1   -  tSize);
    add(zoomButton);
    zoomButton.setBounds(showmeImage[tSize].getWidth(
this -   24 , showmeImage[tSize].getHeight( this -   24 24 24 );
    }
    
    
/* *
     * This controllerUpdate function must be defined in order to
     * implement a ControllerListener interface. This 
     * function will be called whenever there is a media event
     
*/
    
public  synchronized  void  controllerUpdate(ControllerEvent  event
    {
    
//  If we're getting messages from a dead player, 
    
//  just leave
     if  (player  ==   null )
        
return ;
    
    
//  When the player is Realized, get the visual 
    
//  and control components and add them to the Applet
     if  ( event  instanceof RealizeCompleteEvent)
    {
        
if  (( visualComponent  =
          player.getVisualComponent())
!=   null ) {
        cPanel.add(visualComponent);
        }

        
if  (( controlComponent  =  
          player.getControlPanelComponent()) 
!=   null ) {
        
        add(controlComponent);
        controlComponent.setBounds(VLEFT[tSize], VBOTTOM[tSize],
                       WIDTH[tSize], 
24 );
        controlComponent.invalidate();
        controlComponent.repaint();
        }
        reSize();
        player.prefetch();

    } 
else   if  ( event  instanceof EndOfMediaEvent) 
    {
        
//  We've reached the end of the media; rewind and
        
//  start over
        player.setMediaTime( new  Time( 0 ));
        player.prefetch();
    } 
else   if  ( event  instanceof ControllerErrorEvent) {
        player 
=   null ;
        Fatal(((ControllerErrorEvent)
event ).getMessage());
    } 
else   if  ( event  instanceof PrefetchCompleteEvent) {
        
if  (visualComponent  !=   null ) {
        reSize();
        }
        player.start();
        } 
else   if  ( event  instanceof SizeChangeEvent) {
        reSize();
    }
    }

    
void  Fatal (String s) 
    {
    
//  Applications will make various choices about what
    
//  to do here. We print a message and then exit
    System.err.println( " FATAL ERROR:  "   +  s);
    
throw   new  Error(s);  //  Invoke the uncaught exception
                
//  handler System.exit() is another
                
//  choice.
    
    }

    
/* ************************************************************************
     * INNER CLASSES
     ************************************************************************
*/

    
public   class  CPanel extends Panel 
    {
        
public  CPanel() 
        {
            super();
            setBackground(Color.black);
            setLayout( 
null  );
        }
    }

    
public   class  ZoomButton extends Component
    {
        Image up, down;
        
int  newSize;
    
        boolean mouseUp 
=   true ;
        
        
public  ZoomButton(Image up, Image down,  int  newSize) 
        {
            
this .up  =  up;
            
this .down  =  down;
            
this .newSize  =  newSize;
            setSize(
24 24 );
            addMouseListener( 
new  MouseAdapter() 
            {
                
public   void  mousePressed(MouseEvent me) 
                {
                    mouseUp 
=   false ;
                    repaint();
                }
    
                
public  synchronized  void  mouseReleased(MouseEvent me) 
                {
                    mouseUp 
=   true ;
                    TVApplet.
this .tSize  =  ZoomButton. this .newSize;
                    reSize();
                }
            } );
        }

        
public   void  paint(Graphics g)
        {
            
if  (mouseUp)
            g.drawImage(up, 
0 0 this );
            
else
            g.drawImage(down, 
0 0 this );
        }
    }
    
}    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值