华科软件课程设计个人报告_第1页
华科软件课程设计个人报告_第2页
华科软件课程设计个人报告_第3页
华科软件课程设计个人报告_第4页
华科软件课程设计个人报告_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、软件课程设计个人报告题:音乐播放器软件 级:诵信工程1202班 者:号:u201213576指导老师:许毅平课设评价: 课设成绩:一、需求分析1、课题描述描述:基t windows的音乐播放器软件,实现音乐库的管理和播放功能。2、软件基本要求有图形界面;提供基木播放功能:播放、暂停、快进、快退、停止;支持播放模式:单曲播放、单曲循坏、顺序播放和随机播放; 支持播放信息显示:歌曲名、播放时间;支持播放列表管理:歌曲增加、歌曲删除、歌曲播放次序调整。3、拓展要求支持歌词显示和同步播放; 支持本地歌曲搜索和管理; 均衡器管理:支持不同风格的咅乐模式播放; 自动记忆播放功能(程序关闭时能记忆当前播放的

2、歌曲,重启后继续播放); 提供更良好的操作界面;其他功能。4、设计目标使用java语言设计开发一个基丁 jmf的音乐播放器,有基本的图形界面, 尽量做到美观,提供基本的播放功能如播放、暂停、快进、快退、停止,能借助 拖动进度条来控制播放,支持4种播放模式,即单曲播放、单曲循环、顺序播放 和随机播放。支持播放信息显示,将窗口名显示为当前止在播放的歌曲的名称, 显示播放时间。支持播放列表的管理,添加歌曲,删除歌曲,删除列表。预期添加功能:能够同步显示歌词,并且能够让用户根据个人喜好来改变歌 词显示字体。能够联网搜索下载歌曲及歌词,能够分享自c的歌单给qq好友。 能够依靠麦克风提供歌曲录制保存功能。

3、能够更换播放器皮肤。二、总体方案设计说明1、系统框图java咅乐播放器歌曲播放、控制模块图形模块2、软件各模块说明歌词模块播放列表模块歌曲播放控制模块:歌曲的播放、暂停、下一曲、上一曲等功能。图形模块:主界面,进度条、音量条、各控制按钮,图片背景,皮肤变换。歌词模块:歌词显示,歌词同步,歌词字体设置。播放列表模块:添加歌曲、删除歌曲、删除列表,将播放列表生成txt文件存 储。其中图形模块中各个按钮调用了播放控制模块所写的函数,播放歌曲时播放 模块根据播放列表模块中选中歌曲的序号來播放,歌词模块根据播放模块中播放 的歌曲名称來匹配歌词,通过歌曲播放的时间参数來实现歌词同步。3、开发平台及工具jd

4、k, java media framework(jmf), eclipse 编译器。 选择依据:由于java是一个纯的面向对象的程序设计语言,它继承了 c+语言面向对 象技术的核心。java舍弃了 c +语言中容易引起错误的指针(以引用取代)、 运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加 了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不 用再为内存管理而担忧。所以选用java语言來编写咅乐播放器。jmf实际上是java的一个类包°jmf21. 1技术提供了先进的媒体处理能力, 从而扩展了 java平台的功能。这些功

5、能包扌乩 媒体捕获、压缩、流转、冋放, 以及对各种主要媒体形式和编码的支 持,如m-jpeg、h.263、mp3、rtp/rtsp (实 时传送协议和实时流转协议)、macromedias flash、ibm的hotmcclia和beatniks 的rich media format (rmf)等。jmf 2. 1. 1述支持广受欢迎的媒体类型,如 quicktime、microsofts avi 和 mpeg-1 等。此外,jmf 2. 1. 1 软件中包括了一个 开放的媒体架构,可使开发人员灵活釆用各种媒体回放、捕获组件,或采用他们 i己的定制的内插组件。eclipse是一个开放源代码的、

6、基于jewel的可扩展开发平台。就其木身而 言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。eclipse附 带了一个标准的插件集,包括java 发工貝(java development kit, jdk)。三、详细设计说明邵康:负责播放模块、控制模块、播放列表、歌词字体改变等其他模块的开 发,各模块的拼装以及后期测试、优化,小组报告的编写。1、播放列表模块该模块通过在data文件夹创建一个songlist, txt文件来存储添加的歌曲名 称,文件路径。下次播放时直接读取songlist, txt文件来获取播放列表。通过 addlistx deletelist、deleteall三

7、个参数来添加、删除歌曲。每次添加的歌 曲都有一个编号下标,以后的顺序播放和随机播放以及对播放列表的操作都与这 个下标有关。 列表控制前面在图形界面模块已经添加了 3个按钮来控制添加、删除歌曲,并添加了 对3个按钮的监听。public void actionperformed(actionevent e) if (e.getsource() = addlist) open();if (e.getsource() = deletelist) removefile(musicplayer.playerlist.getselectedindex(), false); if (e.getsource()

8、 = deleteall) 讦(joptionpane.showconfiirndialog(null, ” 确认要删除所有的歌曲 吗? n)=0)removefile(musicplayer.playerlist.getselectedindex(), true);根据监听哪个按钮被单击来执行相应的操作。其中open为定义的打开文件的方法,removefile为定义的删除文件的方法。 打开文件public static file| open() jfilechooser filechooser = new jfilechooser();/ 文件过滤器filenameextensionfilt

9、er filter = new filenameextensionfi 1 ter(nmp3",”mp3”,”wav”,”mpg”,”mpeg”,”wav”,”avi”, ”gif; ”gif,” png”,”png”, “jpg”, ”jpg”);filechooser.setfilefilter(filter);filechooser.setfileselectionmode(jfilechooser.files_only);/ 仅限 显示文件filechooser.setmultiselectionenabled(true);/ 允许多选int result = filecho

10、ose r.showopendialog(filechoosei*);if (result = jfilechooser.cancel_option) return null; else files = filechoose r.g etselectedfiles();addlist(files);savelisttofile(files);return files;其屮savelisttofile为定义的写播放列表信息到songlist, txt文件的方法。 addlist为定义的添加文件到播放列表的方法。 添加播放列表private static void addlist(file fil

11、e) for (int i = 0; i < 伍leength; i+) mp3.getsongnamelist().addelement(1 + mp3.getsongnamelist().size() + ”."+ filei.getname();mp3.getsongpathlist().addelement(file| i|);musicplayer.playerlist.setlistdata(mp3.getsongnamelist(); mp3.getsongnamelist().trimtosize();mp3.getsongpathlist().trimtosi

12、ze();从文件屮读取歌曲名称并编号添加到播放列表屮皤啟列表 写songlist.txt文件private static void savelisttofile(file files) buffered writer bf = null;try bf = new bufferedwritermew filewriter(',datasonglist.txt,', true); for (int i = 0; i < files.length; i+) bf.write(filesi +保存的songlist.txt文件如图 删除歌曲public void removefi

13、le(int filelndex, boolean ifall) if (fileindex < nip3.getsongnamelist().size() && !ifall&& fileindex != -1) mp3.getsongnamelist().removeelementat(fileindex); mp3.getsongpathlist().removeelementat( fileindex); else if (fileindex != -1) mp3.getsongnamelist().clear(); mp3.getsongpath

14、list().clear();file.delete();musicplaye r.playerlistsetlistdata(mp3getsongnamelist(); musicplaye r.playerlist.setselectedlndex(filelndex); musicplayer.playerlist.updateui();如果ifall参数为tme,直接删除所有歌曲,为false则删除选屮歌曲。 双击歌曲名则播放private void addlistevent() /歌曲列表中歌曲被双击则播放playerlist.addmouselistener(new mousead

15、apter() public void mouseclicked(mouseevent e) 讦(e.getclickcount() = 2) / 判断是否为双击if (playerlist-getselectedvalue() != null) if (mp3.getcun*entindex() != playerlist.getselectedindex() 讦(mp3.getisstailed() controlle cm p3stop();mp3-setcurrentindex(playerlistegetselectedindex();controller.mp3start();2、

16、歌词显示模块歌词显示模块首先通过当前播放的歌曲的名称匹配相应的lrc歌词文件,然 后定义了一个链表is来存储从lrc文件屮读出的每一行歌词,用ct (current time) 来存储歌曲当前播放时间,用nt来存储从歌词文件读出来的每一行歌词对应的 时间,并换算成秒。通过ct和nt的对应关系来实现歌词的同步,通过时间的变 化来控制每一行字符的垂直位置,进一步实现歌词的滚动显示。 匹配歌词string name = (string) mp3.getsongnamelist().get(mp3.getcurrentindex() - 1);name = name.substring(3, name

17、ength() 4);in 二 new scanner(new file(playertoolba匚resourcedir + name + ”rcu);取播放列表屮当前播放歌曲的名称,然后用substring去掉mp3后缀和前而 的序号,最后加上he后缀打开相应的歌词文件。 歌词显示double ct = player.getmediatime().getseconds();获得当前播放吋间,以秒表示while (true) try s = in.nextline();将歌词字符串存在s中 catch (nosuchelementexception e) break;nt = 60 * in

18、tege匚parselnt(s.substing( 1,3)+ intege匚pai*selnt(s.substring(4, 6)+ integer.parselnt(s.substring(7, 9)/100.0;歌词中当前行的时间,转换成秒显示if (nt > ct) inti= 1;double pt = 0;int of = 0;/of为每一彳亍歌词偏移量讦(ls.size() < 1) continue; else string cs = ls.removelast();/cs 为当前播放的歌词pt = 60 * intege匚parselnmcs.substringu

19、, 3)+ integer.parselnt(cs.substring(4, 6)4- integer.parselnt(cs.substring(7, 9) / 100.0;of = (int) (-(ct - pt) / (nt - pt) * 20);/of 控制每彳亍偏移量讦(ls.size() < 7)小丁 7行时不滚动of = 0;while (ls.size() > 0) g.setcolor(color.gray);播放过的歌词为灰色g.setfont(f);g.drawstring(ls.poll().substring( 10), 30, 20 * i + of

20、); 播放过的行+i;g.setcolor(color. yellow);当前播放的歌词为黄g.setfont(f);g.drawstring(cs.substring( 10), 50, 20 * i + of);当前播放行g.setcolor(color.green);/ 卜一行歌词为绿色+i;g.drawstring(s.substring(10), 10, 20 * i + of);/ 下一个未播放的行for 什+i; i < 20; +i) try s = in.nextline(); catch (nosuchelementexception e) break;g.setco

21、lor(color.black); / b*行以后的歌词为黑色 g.drawstring(s.substring( 10), 10, 20 * i + of);break;ls.add(s);讦(ls.size() > 8)ls.poll();is链表中存歌词行字符串,当取到的当前行时间刚大于播放时间时,立刻 取表中最后一行,即刚读到的一彳亍到cs中,并从is表中移除该彳亍,用removelast 方法实现。然后将is中所有行用灰色字体显示出来,cs行用黄色字体显示出来。 当丽行显示过以后再添加到表中(每当表中元素大于8时用poll方法移除最早存 入的行),然后显示下一行为绿色,最后用一

22、个for循环來用黑色字体显示以后 未播放的几行歌词。这样就实现了当前播放行为黄色,播放过的行为灰色,未播 放的行为黑色。of 二(int) (-(ct - pt) / (nt - pt) * 20);nt-pt计算本行歌词播放总时间,ct-pt表示本行已经播放的时间,(ct-pt) / (nt-pt)表示本行已经播放的比例,乘以20,用of來存储这个值。 g.drawstring(s.substring( 10), 10, 20 * i + of);以后每次显示歌词时,都加上了 of, of即为歌词行垂直方向上向上的偏移,由于播放时间一直在变化,所以of的值 一直改变,从而实现了歌词向上滚动。

23、歌词字体设private jlist fontsizelist;private jlist fontstylelist;private jlist fontnamelist;private jtextfield fontsizetext;private jtextfield fontstyletext;private jtextfield fontnametext;首先用jlist定义3个列表,分别为字体大小,字形和字体。用jtextfield 将当前设置的字体大小,字形和字体显示出來。private void actionforward(listselectionevent argo) fo

24、ntnametext.settext(string.valueof(fontnamelist.getselectedvalue(); fontsizetext.settext(string.valueof(fontsizelist.getselectedvalue();fontstyletext.settext(string.valueof(fontstylelist.getselectedvalue();string name = fontnametext.gettext();string size 二 fontsizetext.gettext();string style = fontst

25、yletext.gettext();通过fontsizetext.settext处理选择的值。if (!size.equals(,nullh) int intsize 二 integer.parselnt(size);if(style.equals("常规”)newfont = new font(name, font.plain, intsize);if (style.equals(“加粗”)newfont = new font(name, font.bold, intsize);if (style.equals("倾斜")newfont = new font(n

26、ame, font.italic, intsize);讦(style.equals(”加粗顷余斗”)newfont = new font(name, font.bold + font.italic,intsize);prve_label.setfont(newfont);通过4个if语句判断來设置字体的风格为常规、加粗、倾斜、加粗一倾斜。 public dialogfont(frame frame, string string) super(frame5 string, true);setresizable(false);setbounds(100, 100, 386, 375);定义弹岀字体

27、设置窗口final jpanel panel = new jpanel();panel.setlayout(null);getcontentpane().add(panel, borderlayout.center);final jlabel label = new jlabel();label.settext("字体:”);label.setbounds( 10, 11,35, 20);panel.add(label);fontnametext = new jtextfield();fontnametext.setbackground(new color(255, 255, 255

28、); fontnametext.seteditable(false);fontnametext.setbounds( 10, 32, 120, 21); panel.add(fbntnametext);设置字体设置的位置宇体:dialog.plainagency fb aharonialdhabialgerianandalus angsana new angsanaupc aparajitaarabic typesettinarialarial blackarial narrov/final j label label_l = new jlabel();label_l .settext(m 字

29、形:”);label_l .setbounds( 151, 11, 35, 20);panel.add(label_l);fontstyletext = new jtextfield(); fontstyletext.setbackground(new color(255, 255, 255); fontstyletext.seteditable(false);fontstyletext.setbounds( 151, 32, 120, 21); panel.add(fontstyletext);设置字形设置的位置加粗加粗坂斜final jlabel label_2 = new jlabel(

30、); label_2.settext(m 大小:”); label_2.setbounds(285, 12, 35, 20); panel.add(label_2);fontsizetext = new jtextfield();fontsizetext.setbackground(new color(255, 255, 255);fontsizetext.seteditable(false);fontsizetext.setbounds(285, 32, 73, 21);panel.add(fontsizetext);设置字体大小设置的位置大小:12121416182022final jla

31、bel label_3 = new jlabel(); label_3.settext(n 预览:”); label_3.setbounds(l5l, 192, 35, 20); panel.add(label_3);设置预览预览:宁体样式wordpadfinal jbutton button = new jbutton();button.addactionlistener(new actionlistener() public void actionperformed(actionevent argo) if (g != null)g< setfont(getfont();setvis

32、ible(false););button.settext("确定”);button.setbounds( 154, 296, 100, 25);panel.add(button);final jbutton button_l = new jbutton();button_l .addactionlistener(new actionlistener() public void actionperformed(actionevent argo) setvisible(false););button_l .settext("取消”);button_l .setbounds(25

33、8, 296, 100, 25); panel.add(button_l);添加“确定”“取消”两个按钮确走取消prvejabel = new jlabel(); prvejabel.sethorizontalalignment(swingconstants.center); prvejabel.setopaque(true);prve_label.setbackground(new color(255, 255, 255); prve_label.setborder(new etchedborder(etchedborder.lowered); prvejabel.settext("

34、;字体样式 wordpad");prve_label.setbounds( 151, 218, 207, 63);panel.add(prve_iabel);将当前设置的字体生成预览”字体样式wordpad”显示出来final jscrollpane scrollpane = new jscrollpane();scrollpane.setbounds( 10, 59, 120, 262);panel.add(scrollpane);fontnamelist = new jlist();fontnamelist.addlistselectionlistener(new listsel

35、ectionlistener() public void valuechanged(listselectionevent argo) actionfor ward(argo););fontnamelist.setselectionmode(listselectionmodel.single_selection); fontnamelist.setmodel(new defaultcomboboxmodel(getfontlist(); scrollpane.set viewport view(fontnamelist);fontstylelist = new jlist(); fontstyl

36、elist<addlistselectionlistener(new listselectionlistener() public void valuechanged(listselectionevent argo) actionforward(argo););fontstylelist.setbounds(151, 59, 120, 124);fontstylelist.setselectionmode(listselectionmodel.single_selection); fontstylelist.setmodel(newdefaultcomboboxmodel(getfont

37、stylelist();panel. add(fontstylelist);final jscrollpane scrollpane_l = new jscrollpane();scrollpane_l .setbounds(285, 59, 73, 124);panel.add(scrohpane_l);fontsizelist = new jlist(); fontsizelist.addlistselectionlistener(new listselectionlistener() public void valuechanged(listselectionevent argo) ac

38、tionforward(argo););fontsizelist.setselectionmode(listselectionmodel.single_selection); fontsizelist.setmodel(newdefaultcomboboxmodel(getfontsizelist(); scrollpane_l.setviewportview(fontsizelist);/以上语句为显示3个列表,并添加监听,监听鼠标左键选定的是三个列表中 的哪一项。最后定义三个列表中的元素。private string getfontstylelist() return new string

39、 ”常规”倾斜”,”加粗”,”加粗_倾斜” ;字形private string getfontsizelist() return new string ”6”,”8”, ”9”, to”,tt; ”12”,”14”, ”16”,”18”,”20”,”22”,”24”, ”26”,”28”, “36”, ”48”, ”72” ;大小private string getfontlist() java.aw匚graphicsenvironment eq = java.awt.graphicsenvironment .getlocalgraphicsenvironment();获取系统当前字体stri

40、ng fontnames = eq.getavailablefontfamilynames();return fontnames;3、歌曲播放、控制模块本模块主要实现歌曲的播放、暂停、停止、下一曲、上一曲、播放进度控制、 播放模式的控制、音量调节、皮肤变换等功能。主要函数:public vector<file> getsongpathlist() return songpathlist;获取歌曲路径列农public void settriggerstart(boolean state) triggerstart = state;设置歌曲状态为播放public boolean get

41、triggerstart() return triggerstart;查询歌曲状态是否为播放public void setcunentlndexcint index) cunentlndex = index;设置当前播放的序号public int getcurrentindex() return currentindex;获取当前播放的序号public void setplayer(player player) this.player = player;设置对象public player getplayer() return player;获取对象public void setisstarte

42、d(boolean state) isstarted = state;设置歌曲状态为开始播放public boolean getisstarted() return isstarted;查询歌曲状态是否为开始播放public void setispaused(boolean state) ispaused = state;设置歌曲状态为暂停public boolean getispaused() return ispaused;查询歌曲状态是否为暂停public void setpausetime(time time) pausetime = time;设置暂停时间public time ge

43、tpausetime() return pausetime;获取暂停时间public vector<string> getsongnamelist() return songnamelist;定义歌曲名称列表播放共分3个状态,播放小,暂停,停止。暂停时记录当前播放时间,下次 点击播放吋读取记录的吋间来继续播放。而停止以后下次播放吋从0开始继续播 放。播放进度的调整调用了 jmf以后可以直接拖动进度条来控制,不需编写代 码控制。 播放播放时直接调用 manager.createrealizedplayer(currentsong.tourl()来创建一 个playei对象,使用了 j

44、mf。从播放列表中取currentindex的值进一步获取当而 要播放歌曲的名称、文件路径,然后打开文件并播放。string song = songlist.get(mp3.getcurrentindex().tostringo;file currentsong = new file(song);player. start();开始播放当判断到是在暂停状态点击播放时,读取暂停时间,从暂停时间继续播放。 用讦语句实现if (mp3.getispaused() playe 匚 setmediatime(mp3.getpausetime();如果是在停止状态点击播放,则从头开始播放。 暂停暂停时获取

45、当前播放时间,记录为暂停时间。然后将isstarted变量设置为 false, ispaused 设置为 true, triggerstart 设置为 false。将 currentindex 设 置为mp3. getcurrentlndexo - 1,以便下次播放时继续播放本歌曲。并且将暂 停按钮替换为播放按钮。if (mp3.getisstarted() player player = mp3.getplayer(); mp3.setpausetime(player.getmediatime(); player.stopo;playe 匸 deallocate。;player.close(

46、);mp3.setisstarted(false);mp3.setispaused(true); mp3>settriggerstart(false); mp3>setcurrentindex(mp3.getcurrentindex() - 1);playertoolba匚stait.setlcon(new imageicon(resourcedir+ hstarto.jpgh); 停止停止时不需要记录时间,直接将isstarted变量设置为false, triggerstart 设置为 false。将 currentindex 设置为 mp3. getcurrentlndex (

47、) - 1,以便下次 播放时继续播放木歌曲。讦(mp3.getisstarted() player player = mp3.getplayer();playe 匚 stop();player.deallocate();player.close();mp3.setisstarted(false);mp3 settriggerstart( false); mp3.setcurrentindex(mp3.getcurrentindex() - 1);需注意的是,无论是暂停还是停止时,都耍先判断是否处于播放状态,否则 可能会出bugo 上.下一曲当切换下一曲时,先判断当前的状态,若为暂停状态,则需要

48、先设置为停止, 并将pausetime清零,否则下一首歌曲会继续从上首歌曲暂停处播放。若为播放 状态,则先停止。然后判断当前歌曲是否为播放列表最后一首,若不为最后一首 歌,则将currentindex加1后继续播放。if (mp3.getisstarted() this.mp3stop();讦(mp3.getispaused() mp3.setpausetime(null); mp3.setispaused(false);int currentindex = mp3.getcuitentindex();if (currentindex < (mp3.getsongpathlist().s

49、ize() - 1) mp3.setcurrentindex(currentindex + 1); this.mp3start();上一曲的切换与此类此,不同的是将currentindex1 判断吋判断的是当前歌 曲是否为播放列表第一首。 皮肤变换通过传递设置的numskin的值,编写5个case,以此来设置各按钮,插入的 图片以及字体颜色。switch (numskin) case 0:snext=hnexto.jpgn;sprevious=nprevious0.jpgn; sstart="starto.jpg"sstop=hstop00.j pgh;sstopl 二”

50、stopl0.jpg”; sstop2="stop20.jpg" saddp=naddpo.jpgh; sdelete=hdeleteo.jpgn; sdeletel=,'deletelo.jpg"ssound=hsound.pngh;musicplaye r.playerlistsetforeground(colo 匚 blue); backgroundimage = new imageicon(playertoolba匚resourcedir+ n ssso.j pgh) getlmage();break;在此只列举一个case,其他case与此类似。

51、 播放模式通过对currentindex的设置来控制下一首歌曲的播放。若为单曲循环,则每 次播放完一首歌曲以后将currentindex设置为当前的currentindex。若为列表播放, 则播放完一首歌曲以后将currentindex加一,当播放到列表最后一首歌时判断到 currentlndex+1 =songlistlength,停止播放。若为列表循坏,则播放到列表最后 一首歌时将currentindex设置为零。若为随机播放,则通过random函数生成一 个取值范围为0到songlistlength的随机数,将currentlndex设置为该随机数。switch (playermenub

52、ar.list) case 1:mp3.setcurrentindex(currentindex);break;case 2:mp3.setcurrentindex(currentindex + 1);break;case 3:if (currentindex + 1 = songlistlength) mp3 setcurren tlndex(o);elsemp3-setcurrentindex(currentindex + 1); break;case 4:int i=(int)(math.random()*songlistlength); mp3-setcurrentindex(i);

53、菜单栏设置菜单栏分5项:文件、播放控制、播放模式、皮肤变换、关于。其中“文件” 中分“打开”和“退出”,分别实现打开文件添加歌曲功能和退出功能。“播放 控制”中分“开始”“暂停”“上一曲” “下一曲”。“播放模式”中4个选项 控制歌曲播放模式的选择。“皮肤变换”中5个选项控制播放器的皮肤选择。“关于”中的帮助选项控制打开帮助窗口,其中存放了帮助信息。型java音乐播方文件皤液掐制 皤議複式 皮跌变换 关于打开ctrl-o退出 ctrl-.'.1加歌曲刪除歌tip hh別圭java音乐播放誥开始(s) ctrl-s 暂働 b) ctn-f 上一曲(l) ctrl-oisfifc 下曲(n

54、) ctrl-n文件皤顽控制is啟模式皮肤变换关于刪除歌曲java音乐播放器18議榄式皮朕变换关于文件is啟控制刪除歌曲单曲循环5"目录牆啟 cvi-s 目录循环id 隨机牆議九if定义5个主选项private jmenu file=new jmenu("文件”);private jmenu player=new jmenu(h播放控制”); private jmenu mode=new jmenu("播放模式”);private jmenu skin = new jmenu(n皮肤变换"); private jmenu help=new jmenu(&

55、quot;关于”); 定义各分选项private mp3controller controller = null;private jmenu file=new jmenu(”文件”);private jmenu player=new jmenu("播放控制”); private jmenu mode=new jmenu(”播放模式”); private jmenu skin = new jmenu("皮肤变换");private jmenu help=new jmenu("关于”);private jmenuitem open=new jmenuitem("打开”); private jmenuitem exit=new jmenuitem("退出”);private jmenuitem prev=null;private jmenuitem next=null;private jmenuitem start二null;private jmenuitem pause=null;private jmenuitem singlerotat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论