版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 HYPERLINK xxxx/ /程序所用到的各種程序包import java.awt.BorderLayout;import java.awt.CheckboxMenuItem;import java.awt.Color;import java.awtxponent;import java.awt.Container;import java.awt.FileDialog;import java.awt.Font;import java.awt.FontMetrics;import java.awt.Graphics;import java.awt.Menu;import java.awt.
2、MenuBar;import java.awt.MenuItem;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.media.ControllerClosedEvent;import javax.media
3、.ControllerEvent;import javax.media.ControllerListener;import javax.media.EndOfMediaEvent;import javax.media.GainControl;import javax.media.Manager;import javax.media.MediaLocator;import javax.media.NoPlayerException;import javax.media.Player;import javax.media.PrefetchCompleteEvent;import javax.med
4、ia.RealizeCompleteEvent;import javax.media.Time;import javax.swing.JFrame;/本程序?qū)?yīng)的類;class MediaPlayerextends JFrameimplements ActionListener, ControllerListener, ItemListener /MediaPlayer類的變量成員的聲明;/JMF提供的播放器對象;Player player;Component vc, cc, gcc;GainControl gc;/first值用來控制在剛開始程序時顯示一幅歡迎界面;loop用以標(biāo)記是否循環(huán)播
5、放;boolean first = true, loop = false;/設(shè)立一個字符串記錄當(dāng)前打開文件的路徑String currentDirectory;MediaPlayer(String title) super(title);/ 利用一個adapter實(shí)現(xiàn)對用戶點(diǎn)擊窗口系統(tǒng)菜單的關(guān)閉按鈕/ 時的響應(yīng);addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) /調(diào)用dispose以執(zhí)行windowCloseddispose();public void windowClosed(Wind
6、owEvent e) if (player != null)player.close();System.exit(0););/調(diào)用設(shè)置程序菜單欄的方法成員完成菜單的布置setupMenu();setSize(400, 400);setVisible(true);/本方法用以設(shè)置程序菜單欄public void setupMenu() /設(shè)置一個菜單Menu f = new Menu(文件);/往設(shè)置的菜單種添加菜單項(xiàng)MenuItem mi = new MenuItem(打開);mi.addActionListener(this);f.add(mi);f.addSeparator();Check
7、boxMenuItem cbmi = new CheckboxMenuItem(循環(huán), false);cbmi.addItemListener(this);f.add(cbmi);f.addSeparator();mi = new MenuItem(退出);mi.addActionListener(this);f.add(mi);Menu l = new Menu(播放列表);Menu c = new Menu(播放控制);MenuItem move = new MenuItem(播放);move.addActionListener(this);c.add(move);c.addSeparat
8、or();MenuItem pause = new MenuItem(暫停);pause.addActionListener(this);c.add(pause);c.addSeparator();MenuItem stop = new MenuItem(停止);stop.addActionListener(this);c.add(stop);c.addSeparator();/設(shè)置一個菜單欄MenuBar mb = new MenuBar();/將設(shè)置的菜單依次加入程序的菜單欄中去mb.add(f);mb.add(c);mb.add(l);/將構(gòu)造完成的菜單欄交給當(dāng)前程序的窗口;setMen
9、uBar(mb);/事件響應(yīng)成員;捕捉發(fā)送到本對象的各種事件;public void actionPerformed(ActionEvent e) /設(shè)一個字符串用于暫存打開的媒體文件的路徑;String cufile , selcectfile;if (e.getActionCommand().equals(退出) / 調(diào)用dispose以便執(zhí)行windowClosed dispose();return;/次事件表明用戶選擇了播放菜單命令;/如果當(dāng)前有一個文件可以播放則執(zhí)行播放命令;if (e.getActionCommand().equals(播放) if (player != null)
10、 player.start();return;/如果當(dāng)前正在播放某一文件,則執(zhí)行暫停;if (e.getActionCommand().equals(暫停) if (player != null) player.stop();return;/次事件表明用戶選擇了播放菜單命令;/如果當(dāng)前有一個文件可以播放則執(zhí)行播放命令;if (e.getActionCommand().equals(停止) if (player != null) player.stop();player.setMediaTime(new Time(0);return;/用戶選擇要播放的媒體文件if (e.getActionCom
11、mand().equals(打開) FileDialog fd = new FileDialog(this, 打開媒體文件, FileDialog.LOAD);fd.setDirectory(currentDirectory);fd.show();/ 如果用戶放棄選擇文件,則返回if (fd.getFile() = null)return;/保存了所選文件的名稱及其全路徑名稱已被稍后使用/同時設(shè)置當(dāng)前文件夾路徑selcectfile = fd.getFile();currentDirectory = fd.getDirectory();cufile = currentDirectory + s
12、elcectfile;/將用戶選擇的文件作為一個菜單項(xiàng)加入播放列表該菜單項(xiàng)名為該文件名;/被點(diǎn)擊后給出的命令串是該文件的全路徑名MenuItem mi = new MenuItem(selcectfile);mi.setActionCommand(cufile);MenuBar mb = getMenuBar();Menu m = mb.getMenu(2);mi.addActionListener(this);m.add(mi); else /程序邏輯運(yùn)行到此表示用戶選擇了一個播放列表中的媒體文件/此時可以通過如下動作獲得該文件的全路徑名;cufile = e.getActionComman
13、d();selcectfile = cufile;/如果已存在一個播放器,則先將其關(guān)閉,稍后重新創(chuàng)建/創(chuàng)建播放器時需要捕捉一些異常;if (player != null)player.close();try player = Manager.createPlayer(new MediaLocator(file: + cufile); catch (java.io.IOException e2) System.out.println(e2);return; catch (NoPlayerException e2) System.out.println(不能找到播放器.);return;if (p
14、layer = null) System.out.println(無法創(chuàng)建播放器.);return;first = false;setTitle(selcectfile);/設(shè)置處理播放控制器實(shí)際的對象;player.addControllerListener(this);player.prefetch();/因?yàn)閷?shí)現(xiàn)了ControllerListener接口,本方法用于處理媒體播放器傳來的事件;public void controllerUpdate(ControllerEvent e) Container tainer = getContentPane();/ 調(diào)用player.close
15、()時ControllerClosedEvent事件出現(xiàn)。/ 如果存在視覺部件,則該部件應(yīng)該拆除(為一致起見,/ 我們對控制面板部件也執(zhí)行同樣的操作下一次需要時再構(gòu)造)if (e instanceof ControllerClosedEvent) if (vc != null) remove(vc);vc = null;if (cc != null) remove(cc);cc = null;return;/在播放結(jié)束時,將播放指針置為文件之首,如果設(shè)定了循環(huán)播放,則再次啟動播放器;if (e instanceof EndOfMediaEvent) player.setMediaTime(ne
16、w Time(0);if (loop) player.start();return;/PrefetchCompleteEvent事件發(fā)生后調(diào)用start,正式啟動播放if (e instanceof PrefetchCompleteEvent) player.start();return;/本事件表示由于用于播放的資源已經(jīng)確定;此時要將媒體的圖形conmopnent/(如果有)顯示出來,同時將播放器player的控制器顯示到窗口里;if (e instanceof RealizeCompleteEvent) /如果媒體中有圖像,將對應(yīng)圖像component載入窗體;vc = player.ge
17、tVisualComponent();if (vc != null)tainer.add(vc, BorderLayout.CENTER);/將對應(yīng)控制器component載入窗體;cc = player.getControlPanelComponent();cc.setBackground(Color.BLUE);if (cc != null)tainer.add(cc, BorderLayout.SOUTH);/有一些特殊媒體在播放時提供另外的控制手段,將該控制器一并加入窗口;gc = player.getGainControl();gcc = gc.getControlComponent
18、();if (gcc != null)tainer.add(gcc, BorderLayout.NORTH);/根據(jù)媒體文件中是否有圖像,設(shè)定相應(yīng)的窗口大小if (vc != null) pack();return; else setSize(300, 75);setVisible(true);return;/菜單狀態(tài)改變事件的響應(yīng)函數(shù);public void itemStateChanged(ItemEvent e) loop = !loop;/不執(zhí)行背景清除操作,以免控制面板部件閃爍/同時使得本程序在用鼠標(biāo)拖動窗口時存在一些沒有及時重繪的情況,有待改進(jìn)public void update(Graphics g) paint(g);/本類的main函數(shù),其中構(gòu)造了本類的一個實(shí)例;public static void main(String args) new MediaPlayer(簡單媒體播放器);public void paint(Graphics g) / 調(diào)用超類Frame的paint()方法,該paint()方法將調(diào)用Frame包含的各個容器/ 和部件(包括控制面板部件)的paint()方法。super.paint(g);/以下代碼實(shí)現(xiàn)了在開啟程序之初顯示歡迎界面if (first) int w = getSize().
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘇教版數(shù)學(xué)一年級下冊教案
- 2024年游艇碼頭物業(yè)委托管理及船舶維護(hù)服務(wù)協(xié)議3篇
- 2024年甲乙雙方關(guān)于物聯(lián)網(wǎng)技術(shù)研發(fā)與推廣的合同
- 商場工作計(jì)劃模板七篇
- 減溫減壓閥行業(yè)行業(yè)發(fā)展趨勢及投資戰(zhàn)略研究分析報告
- 簡短的個人述職報告
- 2022新學(xué)期開學(xué)感悟(10篇)
- 以家為話題作文15篇
- 幼兒園大班體育教案教學(xué)
- 土木工程認(rèn)知實(shí)習(xí)報告4篇
- 山東2022青島農(nóng)商銀行萊西支行行長社會招聘上岸提分題庫3套【500題帶答案含詳解】
- 2023-2024學(xué)年江蘇省啟東市小學(xué)語文五年級上冊期末通關(guān)考試題
- 設(shè)計(jì)中重點(diǎn)、難點(diǎn)及關(guān)鍵技術(shù)問題把握控制及相應(yīng)措施把握難點(diǎn)
- YY/T 0698.2-2009最終滅菌醫(yī)療器械包裝材料第2部分:滅菌包裹材料要求和試驗(yàn)方法
- GB/T 1535-2017大豆油
- 《鄉(xiāng)鎮(zhèn)環(huán)境治理研究開題報告文獻(xiàn)綜述11000字》
- 植物細(xì)胞信號轉(zhuǎn)導(dǎo)課件
- 名著黑布林閱讀Treasure Island《金銀島》練習(xí)題(含答案)
- 第二章-地方理論-《旅游目的地管理》課件
- 河北省唐山市藥品零售藥店企業(yè)藥房名單目錄
- 水上運(yùn)輸大型構(gòu)件安全交底
評論
0/150
提交評論