一、課程設(shè)計目的
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站設(shè)計、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)洞口,10年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
1、編程設(shè)計音樂播放軟件,使之實現(xiàn)音樂播放的功能。
2、培養(yǎng)學(xué)生用程序解決實際問題的能力和興趣。
3、加深java中對多媒體編程的應(yīng)用。
二、課程設(shè)計的要求
利用學(xué)到的編程知識和編程技巧,要求學(xué)生:
1、系統(tǒng)設(shè)計要能完成題目所要求的功能,設(shè)計的軟件可以進(jìn)行簡單的播放及其他基本功能。
2、編程簡練,可用,盡可能的使系統(tǒng)的功能更加完善和全面
3、說明書、流程圖要清楚。
三、課程設(shè)計內(nèi)容
1、課程設(shè)計的題目及簡介
音樂播放軟件要求:
有圖形界面,能播放MP3歌曲,有播放列表,前一首、后一首等常用播放軟件功能。
2、設(shè)計說明
主要運用多媒體編程、圖形界面、數(shù)組及循環(huán)進(jìn)行設(shè)計,從而實現(xiàn)簡單的音樂播放。
package com.mainyin; import javax.media.ControllerEvent; import javax.media.ControllerListener; import javax.media.EndOfMediaEvent; import javax.media.PrefetchCompleteEvent; import javax.media.RealizeCompleteEvent; import javax.media.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MediaPlayer extends JFrame implements ActionListener, ItemListener, ControllerListener { String title; Player player; boolean first = true, loop = false; Component vc, cc; String currentDirectory=null; // 構(gòu)造函數(shù),其中包括了設(shè)置響應(yīng)窗口事件的監(jiān)聽器。 MediaPlayer(String title) { super(title); /* 關(guān)閉按鈕的實現(xiàn)。。 */ addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); } public void windowClosed(WindowEvent e) { if (player != null) player.close(); System.exit(0); } }); // 調(diào)用程序菜單欄的方法成員完成菜單的布置 setupMenu(); setSize(400, 400); setVisible(true); } // 本方法用以設(shè)置程序菜單欄 public void setupMenu() { // 設(shè)置一個菜單 Menu f = new Menu("文件"); // 往設(shè)置的菜單添加菜單項 MenuItem mi = new MenuItem("打開"); f.add(mi); mi.addActionListener(this); f.addSeparator(); CheckboxMenuItem cbmi = new CheckboxMenuItem("循環(huán)", false); cbmi.addActionListener(this); f.add(cbmi); f.addSeparator(); MenuItem ee = new MenuItem("退出"); ee.addActionListener(this); f.add(ee); f.addSeparator(); Menu l = new Menu("播放列表"); Menu c = new Menu("播放控制"); MenuItem move = new MenuItem("播放"); move.addActionListener(this); c.add(move); c.addSeparator(); 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(); mb.add(f); mb.add(c); mb.add(l); // 將構(gòu)造完成的菜單欄交給當(dāng)前程序的窗口; setMenuBar(mb); } // 動作時間響應(yīng)成員;捕捉發(fā)送到本對象的各種事件; public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub String cufile, selectfile, currentDirectory; if (e.getActionCommand().equals("退出")) { // 調(diào)用dispose以便執(zhí)行windowClosed dispose(); return; } // 此事表明擁護(hù)選擇了“播放”命令; // 如果當(dāng)前有一個文件可以播放則執(zhí)行播放命令; if (e.getActionCommand().equals("播放")) { if (player != null) { player.start(); } return; } // 如果當(dāng)前正在播放某一文件,則執(zhí)行暫停; if (e.getActionCommand().equals("暫停")) { if (player != null) { player.stop(); } return; } // 停止命令的響應(yīng); if (e.getActionCommand().equals("停止")) { if (player != null) { player.stop(); player.setMediaTime(new Time(0)); } return; } // 用戶選擇要播放的媒體文件 if (e.getActionCommand().equals("打開")) { FileDialog fd = new FileDialog(this, "打開媒體文件", FileDialog.LOAD); // fd.setDirectory(currentDirectory); fd.setVisible(true); // 如果用戶放棄選擇文件,則返回 if (fd.getFile() == null) { return; } // 保存了所選文件的名稱及其路徑名稱已被稍后使用 // 同時設(shè)置當(dāng)前文件夾路徑 selectfile = fd.getFile(); currentDirectory = fd.getDirectory(); cufile = currentDirectory + selectfile; // 將用戶選擇的文件作為一個菜單項加入播放列表,該菜單項名為該文件名; // 被點擊后給出的命令串是該文件的全路徑名 MenuItem mi = new MenuItem(selectfile); mi.setActionCommand(cufile); MenuBar mb = getMenuBar(); Menu m = mb.getMenu(2); mi.addActionListener(this); m.add(mi); } else { // 程序邏輯運行到次表示用戶選擇了一個“播放列表”中的媒體文件 // 此時可以通過如下動作獲得該文件的全路徑名 cufile = e.getActionCommand(); selectfile = cufile; } // 如果存在一個播放器,則先將其關(guān)閉,稍后再重新創(chuàng)建 // 創(chuàng)建播放器時需要捕捉一些異常 if (player != null) { player.close(); } try { player = Manager.createPlayer(new MediaLocator("file:" + cufile)); } catch (Exception e2) { System.out.println(e2); return; }/* * catch(NoPlayerException e2){ System.out.println("不能找到播放器"); * return ; } */ if (player == null) { System.out.println("無法創(chuàng)建播放器"); return; } first = false; setTitle(selectfile); // 設(shè)置處理播放控制器實際的對象; /**/ player.addControllerListener(this); player.prefetch(); } // 菜單狀態(tài)改變事件的響應(yīng)函數(shù); public void itemStateChanged(ItemEvent arg0) { // TODO Auto-generated method stub } public static void main(String[] args) { // TODO Auto-generated method stub new MediaPlayer("播放器"); } // 調(diào)用繪圖函數(shù)進(jìn)行界面的繪制 // public void update() { // } // 繪圖函數(shù)成員 //public void paint(Graphics g) { // } public void controllerUpdate(ControllerEvent e) { // TODO Auto-generated method stub Container tainer = getContentPane(); // 調(diào)用player.close()時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; } } // 播放結(jié)束時,將播放指針置于文件之首,如果設(shè)定了循環(huán)播放,則再次啟動播放器; if (e instanceof EndOfMediaEvent) { player.setMediaTime(new Time(0)); if (loop) { player.start(); } return; } // PrefetchCompletEvent事件發(fā)生后調(diào)用start,正式啟動播放 if (e instanceof PrefetchCompleteEvent) { player.start(); return; } // 本事件表示由于播放的資源已經(jīng)確定;此時要將媒體的圖形conmopnent // 如果有顯示出來,同時將播放器player的控制顯示到窗口里; if (e instanceof RealizeCompleteEvent) { // 如果媒體中有圖像,將對應(yīng)圖像component載入窗體; vc = player.getVisualComponent(); 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(); * if(gcc!=null) tainer.add(gcc,BorderLayout.NORTH); */ // 根據(jù)媒體文件中是否有圖像,設(shè)定相應(yīng)的窗口大小 if (vc != null) { pack(); return; } else { setSize(300, 75); setVisible(true); return; } } } }
程序運行結(jié)果:
總結(jié):
經(jīng)過這幾天的Java課程設(shè)計,讓我知道了做課程設(shè)計的一般方法,通過各種努力終于完成了設(shè)計要求.這次課程設(shè)計基本上含蓋了大學(xué)一年學(xué)習(xí)到的Java語言知識點,課設(shè)題目要求不僅要求對課本知識有較深刻的了解,同時要求程序設(shè)計者有較強的思維和動手能力。這次課設(shè)使我了解我編程思想和編程技巧,也再一次熟悉了開發(fā)程序的過程,包括構(gòu)思、設(shè)計、編寫、調(diào)試、修訂。
做課程設(shè)計不僅讓我修補了以前學(xué)習(xí)的漏洞,也讓我跟激發(fā)了對程序開發(fā)的興趣和自信。創(chuàng)新思維至關(guān)重要,這應(yīng)該可以借鑒在老師的教學(xué)工作上,這不僅讓我們寫出精簡的代碼,也有助于開發(fā)出高效的程序。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。