導入Java . util . *;
導入Java . net . *;
導入Java . lang . reflect . method;
導入Java . awt . *;
導入Java . awt . event . *;
導入Java . io . *;
導入javax . swing . *;
導入javax . media . *;
導入javax . media . util . *;
導入javax . media . format . *;
導入javax . media . control . *;
導入javax . media . protocol . *;
導入javax . media . bean . player bean . *;
導入javax . media . RTP . *;
導入javax . media . RTP . event . *;
導入javax . swing . border . *;
公共類MediaPlayer擴展JPanel實現ControllerListener{
//定義接口組件
JMenuBar main menu = new JMenuBar();
JMenu file menu = new JMenu(" file ");
JMenu play menu = new JMenu(" play ");
JMenu help menu = new JMenu(" help ");
j menuitem open menuitem = new j menuitem(" open ");
j menuitem exit unitem = new j menuitem(" exit ");
jcheckbox menuitem loop menuitem = new jcheckbox menuitem(" loop ");
j menuitem about menuitem = new j menuitem(" about ");
JLabel status = new JLabel("歡迎使用視頻播放系統");
JPanel media panel = new JPanel();
玩家玩家;
組件visualcom,controlcom
布爾優先=真,循環=假;
string current directory = " d:/music ";//記錄所選媒體文件的位置
JInternalFrame min
公共媒體播放器(JInternalFrame mi){
min = mi
set layout(new BorderLayout());
set background(color . light gray);
setLocale(new Java . util . locale(" zh "," CN "," "));
MediaPanel.setToolTipText("視頻窗口");
media panel . setverifyinputwhenfocustarget(true);
media panel . set layout(new BorderLayout());
Status.setToolTipText("狀態欄");
MainMenu.setToolTipText("菜單欄");
file menu . add(openMenuItem);
openmenuitem . addactionlistener(new OpenFile(this));
file menu . add(exit menuitem);
exit menuitem . addactionlistener(new action listener(){
public void action performed(action event e){
min . dispose();
player . stop();
返回;
}
});
play menu . add(loop menuitem);
loop menuitem . addactionlistener(new action listener(){
public void action performed(action event e){
loop =!循環;
}
});
help menu . add(about menuitem);
about menuitem . addactionlistener(new action listener(){
public void action performed(action event e){
//顯示“關於”窗口
關於DLG = new About();
dimension DLG size = DLG . getpreferredsize();
dimension frm size = getSize();
point loc = get location();
DLG . set location((frm size . width-DLG size . width)/2+loc . x,
(frm size . height-DLG size . height)/2+loc . y);
DLG . set modal(true);
DLG . pack();
DLG . set visible(true);
}
});
main menu . add(file menu);
main menu . add(play menu);
main menu . add(help menu);
status . set border(border factory . createloweredbevelborder());
status . seto paque(true);
status . set icon(new image icon(base item。media player . class . get resource(" logo . png "));
添加(mainMenu,BorderLayout。北);
add(mediaPanel,BorderLayout。中心);
添加(status,BorderLayout。南);
}
public void controller update(controller event e){
//當調用player.close()方法時,ControllerClosedEvent發生。
//如果有可視化組件,就應該去掉(為了壹致性,
//我們也為控制面板組件做同樣的事情)
if(例如ControllerClosedEvent的實例){
如果(visualcom!= null){
media panel . remove(visual com);
visualcom = null
}
如果(controlcom!= null){
media panel . remove(control com);
controlcom = null
}
返回;
}
//如果回放結束,會發生EndOfMediaEvent,檢查是否是循環回放。
//如果是,調用player start()方法繼續播放。
EndOfMediaEvent的實例){
if(循環){
player.setMediaTime(新時間(0));
player . start();
}
返回;
}
if(e instance of PrefetchCompleteEvent){
player . start();
返回;
}
if(e實例of RealizeCompleteEvent){
visual com = player . getvisual component();
如果(visualcom!=空)
mediaPanel.add(visualcom,BorderLayout。中心);
control com = player . getcontrolpanelcomponent();
如果(controlcom!=空)
mediaPanel.add(controlcom,BorderLayout。南);
}
min . pack();
}
//用於處理“打開”菜單項的類
類OpenFile實現ActionListener{
MediaPlayer mp
公共OpenFile(MediaPlayer mp){
this.mp = mp
}
public void action performed(action event e){
//構造壹個文件來選擇壹個組件實例並設置其屬性。
jfile chooser FD = new jfile chooser();
fd.setSelectedFile(新文件(當前目錄));
set fileselectionmode(jfile chooser。僅限文件);
int result = FD . showopendialog(min);
//如果用戶放棄選擇文件,返回。
if(result==JFileChooser。取消_選項)
返回;
current directory = FD . getselectedfile()。toString();
如果(玩家!=空)
player . close();
嘗試{
player = manager . create player(new media locator(" file:"+current directory));
}
catch (java.io.IOException e2) {
system . out . println(E2);
返回;
}
catch (NoPlayerException e2) {
System.out.println("找不到玩家。");
返回;
}
if (player == null) {
System.out.println("無法創建播放器。");
返回;
}
first = false
Min.setTitle("播放文件位置"+當前目錄);
//為播放組件註冊偵聽器。
player . addcontrollerlistener(MP);
player .預取();
}
}
}