ImageVerifierCode 换一换
格式:DOC , 页数:17 ,大小:114.50KB ,
资源ID:9450039      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/9450039.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(java媒体播放器实验报告.doc)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

java媒体播放器实验报告.doc

1、 面 向 对 象 程 序 设 计 题目:媒体播放器 班级:计算机科学与技术二班 组员:徐开泰 杨润明 魏丹丹 王宏鑫 王家俊 /*组长:徐开泰 2013040349 小组成员 (1)学号:2013040349 姓名徐开泰 (2)学号:2013042107 姓名杨润明 (3)学号:2013020040 姓名魏丹丹 (4)学号:2013020141 姓名王宏鑫 (5)学号

2、 姓名王家俊 1 概述 随着社会文明的发展,人们不再仅仅满足于物质享受,更加追求精神上的享受。音乐作为艺术的一种形式,成为人们日常生活中的一种娱乐方式,于是媒体播放器很好地实现了音乐的打开、播放、暂停、停止、快进、快退等功能,方便人们选择性地欣赏。 通过了解和运用Java编程工具编写制作视频媒体播放器,提高Swing和jmf技术结合的综合运用能力。 2.需求分析 2.1任务目的: 1.实现视频文件的正确播放; 2. 能够实现对视频播放的控制,如暂停,播放,快进,快退,上一个,下一个等功能; 3.能够进行文件视频的选择,全屏,音量的控制,

3、拖动,播放模式的控制等; 4.任意改变播放视频界面大小等功能。 要求学生掌握: 掌握Java的语言规范,面向对象的核心概念和特性。 掌握Java的编程技术,包括异常处理,图形界面设计,多线程,网络通信程序等。 掌握Java应用软件的开发环境和开发过程 掌握基于Jsp网站的开发环境和开发过程 掌握面向对象的思想和程序设计方法。 2.2程序的设计、调试、运行的软件环境: 操作系统:Windows XP(SP2) 数据库及数据库管理软件:SQL Server 2000 JDK环境:Java SE Development Kit(JDK)Version 6 开发工具:Eclip

4、se3.2 运行平台:Windows、Linux各个版本、MAC等任何平台 运行环境:Java SE Runtime Environment(JRE)Version 3.程序设计过程 3.1实验原理 JMF提供了一个平台无关的框架来呈现时基媒体(time-based media)。JavaMediaPlayerAPI的设计目标是支持多种标准的媒体格式,包括MPEG-1,MPEG-2,QuickTime,AVI,WAV,AU和MIDI.使用JMF,可以同步呈现不同来源的时基媒体。 现有的一些媒体播放器都严重依赖原生码来执行解压缩、渲染 等 计算密集型任务。而JMF API则隐藏了

5、具体实现,只提供抽象的编程接口。 举例来说,一个用JMF制作的播放器,具体运行的过程中可能会调用到操作系统的本地方法,但开发者写代码时可以无视本地方法的存在。 JMF Player API : 接入不同的协议和分发(传输)机制 接入不同的媒体数据类型 定义事件模型,用于Player和应用程序间的异步通信 3.1.1数据源(Data Source) 一个DataSource 封装了媒体的地址、协议和分发的软件。一个JavaMediaPlayer包含一个DataSource。一旦创建,这个DataSource不能被用于其他媒体的传输。 一个Player的数据源可以用MediaLo

6、cator或URL来标示。 MdiaLocator(媒体定位器)是一个JMF类,用来描述Player播放的媒体。MediaLocator与URL类似,并且可以从URL来创建。他们的区别在于,在Java中,URL只有其协议是已知协议时才能被创建,而MediaLocator则没有这个限制。 Java 媒体播放器可以播放来自多种数据源的媒体数据,包括本地、网络文件和实时广播等。 JMF支持两种不同的数据源。 Pull Data-Source (数据源被动的被获取)-由客户端发起数据传输并控制数据流,已知的协议包括HTTP(超文本传输协议)和本地文件。 Push Data-Source (数

7、据源主动推送)-由服务器发起数据传输并控制推送数据流。此类数据源包括广播媒体,多点传送的媒体和VOD(视频点播)。 客户端程序所能够控制的度量,取决于媒体源的类型。举个例子说,MPEG文件可以被重定位(reposition),那么播放MPEG的客户端程序就可以允许用户重播或者跳进至一个新时间点;而由服务器段控制的广播媒体则不能被重定位;另外VOD协议则支持有限的用户操作,比如一个VOD客户端程序可以允许用户跳进至新位置,但不能快进和快倒。 3.1.2 Players 一个Java Media Player是一个对象。她基于时间来处理数据流,从DataSource读取数据并在确切的时间点渲

8、染媒体。一个Java Media Player必须实现Player interface. Clock定义了基本的计时和同步操作, 她被Player 用来控制媒体的呈现。 Controller继承Clock对外提供提供如下方法: 管理系统资源 预载数据 提供监听机制(Observable),对外发送媒体事件通知 Duration提供了检测媒体时长的途径。 Player支持标准的用户控制,并放宽了来自于Clock的一些操作限制。 多个Player共享一个公共的计时和同步模型。一个Player的媒体时间表示了媒体流的当前位置。每一个Player有一个TimeBase。TimeBase

9、定义了Player的时间流逝。当一个Player 被执行start,他的媒体时间会被映射到time-base时间。如多个媒体要同步,那么他们必须使用同一个TimeBase. 一个Player的用户界面可以包含一个可视组件和一个控制面板组件(control- panel component)。我们用的时候可以选择实现一个自定义的用户界面,或者使用Player的默认的控制面板组件。 一般来说,一个Player在能够呈现媒体之前,必须先执行一序列的操作。而这些操作有可能会耗费一定的时间,所以JMF定义了一些操作状态,并且提供了状态转换的操作机制。 3.1.3 Media Events JMF

10、事件报告机制允许我们的程序响应媒体驱动的错误,比如数据丢失或资源不可用。事件系统同时也提供了重要的通知协议;当我们的程序调用一个Player的异步方法时,只有当收到响应的事件消息时,才能确认操作是否完成。 有两种JMF对象会抛出事件,他们是: GainControl对象 和 Controller 对象。 对于事件, GainControl和 Controller 遵循Java Beans 形式。 GainControl对象只抛出一种类型的事件- GainChangeEvent。我们通过实现 GainChangeListener interface来响应gain(增益?)的变化。 Cont

11、roller则会抛出多种派生自 ControllerEvent的事件。我们通过实现 ControllerListener interface 来接收诸如Player的Controller抛出的事件消息。 下图显示了Controller抛出的各种事件类型: ControllerEvents 可分为三类:改变通知、关闭事件和转换事件 变化通知(Change notification events)诸如 RateChangeEvent 和 DurationUpdateEvent。他们表示Player的一些属性数值发生了变化。这类事件通常是对一些方法调用的回馈。例如, 一个Player的setR

12、ate方法被调用,他会抛出一个 RateChangeEvent. 转换事件(TransitionEvents) 让我们的程序能够响应Player的状态变化。 当Player从一个状态转换到另一个状态时,就会抛出一个转换事件。 (在1.4中,我们会提供更多的关于Player状态的信息) 当player关闭时,则会抛出关闭事件(ControllerClosedEvents)。当一个Player不再可用时,抛出 ControllerClosedEvent. ControllerErrorEvent(控制器错误事件)则是关闭事件的一个特例。我们写程序时,通过监听控制器错误事件,可以对Player故

13、障作出响应,从而增进用户体验。 3.1.4 Player States JavaMediaPlayer有6种状态。Clock 接口定义了两种主要的状态:Stopped和Started。 在普通操作中,Plyaer在到达Started状态前,会逐个通过上图中的每一个状态。 Unrealized(未实现) 状态表示Player已经被实例化,但还不知道媒体的任何信息。当Player第一次被创建,他的状态就是Urealized。 Player的realize方法被调用后,会从Unrealized转入Realizing(实现中)状态。这时的Player应该正在检测资源需求。在relizatio

14、n过程中,Player会获取只需加在一次的资源。这些资源包括非独享的渲染资源。(独享资源指的受限的资源。例如只能被一个播放器使用的个别硬件资源,此类资源会在预取(Prefetching)的过程中加载。) Realizing中的Player常常通过网络下载东西。 Player结束Realizing状态后,会转入 Realized(已实现)状态。这个状态下,Player会知道他需要哪些资源,还知道媒体的类型信息。因为Realized Player知道怎样渲染数据,所以他能够提供可视组件和控件。此时 ,Player与其他系统对象的连接已经就位,但此时还不会占用任何会阻止其他Player启动的资源。

15、 Prefetch被调用后,Player会从Realized状态转入Prefetching(预取中)状态。此时播放器在为呈现媒体作准备,包括调用媒体数据、获取独享资源 和其他一些准备工作。在媒体呈现过程中,一些操作可能会导致 Prefetching状态 重现,例如重新定位播放位置、播放器请求额外的缓冲区等。 当Player 结束预取,将转入 Prefetched( 预取完成 ) 状态。此时Player 已经准备开始播放但尚为实际开始。 调用start方法将使Player转入Started状态。此时,Player的媒体时间被映射到time-base时间,并且clock开始运行。此时播放器有

16、可能会等待一个恰当的时间来呈现媒体数据。 当player从一个状态转入另一个状态时,会抛出 TransitionEvents(转换事件),我们可以通过实现 ControllerListener接口来监听这些时间并作出恰当的响应。 当播放器开始Realizing和Prefetching的时候,我们可以使用事件报告机制对Player进行管理,在调用Player方法之前,我们可以先检查Player状态,在作出恰当的操作。 3.1.5 Calling JMF Methods 调用JMF方法时的一些约定 JMF对于errors(错误)和exceptions(异常)作如下约定。 Java

17、 Media Errors 是当程序调用了一个当前状态下非法的方法时抛出的。Errors是在外部程序有控制权的状态下执行了非法的请求而抛出的。举例来说,调用一个处于Started的Player的方法时抛出的就是error。开发者有责任在调用方法前确认Player已被停止。JMF error是可以通过优化代码来避免的,应用程序不应该捕获JMF errors, 好的应用程序不会碰到这些错误。 Java Media Exceptions是当程序调用了不能完成的方法或在当前状态下不适用的方法。Exceptions是在外部程序没有控制权的状态下抛出的。例如当我们试图同步两个time-base不匹配的P

18、layer时,就会抛出异常。之所以是异常而不是错误,是因为我们无从检测time-base是否匹配,是无法预期的。 有时,JMF的一些方法会返回非预期的结果,通过检查返回直,我们可以检测实际发生的事情: 我们可以通过返回直检查实际被设置的数值,例如:并不是所有的播放器都可以每周期5次的速率呈现媒体数据,如果我们调了setRate(5.0),播放器将会设置一个合法的近似直,这个数值可能是5.0也可能是1.0,我们需要检查返回数据来确认被设置的数据。 进行相关的组件添加,关联,贴图等初始化工作 有时,我们请求的信息是不可用的。例如:Player在播完一个媒体之前,可能不知道媒体的时长,这时如

19、果我们调了getDuration(),getDuration会返回 DURATION_UNKNOWN.当媒体被播放完一次,再调getDuration时,则会返回正确的时长。 3.2 程序设计图 界面级相关组件设置与初始化方法: setComponentProperty() List中右击鼠标事件处理,弹出选择操作菜单:mousePressed(); List中双击鼠标事件处理,开始播放选中文件:mouseClicked(); 单击List中从列表删除事件:menuItem_delete.addMouseListener(); List列表框中鼠标事件监听及处理方法:

20、addPlayListListener() 中播放暂停事件:menuItem_playSelect.addMouseListener(); 单击Li单击Listst中向列表中添加事件:menuItem_addFile.addMouseListener(); 单击List中清除播放列表事件:menuItem_deleteAll.addMouseListener(); 界面上控制按钮单击事件监听及处理方法:addPlayBottonListener() 左键单击播放暂停按钮事件处理:but_Play.addActionListener(); 左键单击停止按钮

21、事件处理:but_Stop.addActionListener(); 左键单击上一个按钮事件处理:but_Prior.addActionListener(); 左键单击下一个按钮事件处理:but_next.addActionListener(); 左键单击快进按钮事件处理:but_quickForward.addActionListener(); 左键单击静音按钮事件处理:but_Sound.addActionListener(); 左键单击文件按钮事件处理:file.addMouseListener(); 左键单击快退按钮事件处理:but_quickBack.ad

22、dActionListener(); 左键单击单曲播放按钮事件处理:single_play.addMouseListener(); 左键单击随机播放按钮事件处理: random_play.addMouseListener(); 左键单击循环播放按钮事件处理: loop_play.addMouseListener(); 左键单击单曲循环按钮事件处理:single_loop.addMouseListener(); 构造函数 调用成员方法 开始 : 对 象 实 例 化 对菜单条的鼠标事件监听及处理方法:addPlayMenuListen

23、er() 左键单击停止按钮事件处理:stop.addActionListener(); 左键单击播放暂停按钮事件处理:playOrpause.addActionListener(); 左键单击打开按钮事件处理:open.addActionListener(); 左键单击退出按钮事件处理:exit.addActionListener(); 左键单击关于按钮事件处理:about.addActionListener(); 左键单击帮助按钮事件处理:help_.addActionListener(); 单击播放暂停按钮事件处理:me

24、nuItem_play.addActionListener(); 单击停止按钮事件处理:menuItem_stop.addActionListener(); 对播放界面上播放视频时右击事件监听及处理方法:addRightClickListener() 单击快进按钮事件处理:menuItem_skinForward.addActionListener(); 单击快退按钮事件处理:menuItem_rewind.addActionListener(); 单击退出按钮事件处理:menuItem_exit.addActionListener(); 对播放视频

25、时改变窗体大小事件监听及处理方法: Container.addCompnentLister(); 对用户拖动进度条事件监听及处理方法: Jslider_progress.addMouseLiatener(); startPlayer(String mediaLocation); 初始化播放器,准备开始播放视频文件: 一个内部类进行视频文件的相关操作: class PlayerEventHandler extends ControllerAdapter ; 核心代码: /*************************

26、/ public ppp(String s){ //构造函数 super(s); setComponentProperty(); addPlayListListener(); addPlayButtonListener(); addPlayMenuListener(); addRightClickListener(); addFrameChangeListener(); } //构造函数结束 /***************************************************

27、/ public void addPlayListListener(){ //对list列表中鼠标事件进行监听并处理 list.addMouseListener(new MouseAdapter(){ //list列表监听事件 public void mousePressed(MouseEvent e) { //super.mousePressed(e); System.out.println(e.getModifiers());//通过这个函数返回值区分是单击还是双击 int mods = e.getModifiers(); if (mods==4){

28、 //4时为右击 popupMenuList.add(menuItem_playSelect); popupMenuList.add(menuItem_delete); popupMenuList.add(menuItem_Addfile); popupMenuList.add(menuItem_deleteAll); popupMenuList.show(list, e.getX(), e.getY()); } } public void mouseClicked(MouseEvent e){ if(e.getClickCount()==2){ //在列表框中双击

29、事件 for(int i=0;i

30、break; } catch (MalformedURLException E) { E.printStackTrace(); } } } }); menuItem_delete.addMouseListener(new MouseAdapter(){ //单击list中“从列表中删除”事件 public void mousePressed(MouseEvent e) { model.removeElement(list.getSelectedValue()); fileName.removeElement(list.getSelectedValue()); file

31、Direction.removeElement(list.getSelectedValue()); } }); menuItem_playSelect.addMouseListener(new MouseAdapter(){ //单击list中“播放选中文件”事件 public void mousePressed(MouseEvent e) { try { for(int i=0;i

32、edValue().toString())) { startPlayer(fileDirection.get(i).toURL().toString()); System.out.println(fileDirection.get(i).toURL().toString()); but_play.setIcon(new ImageIcon("pause_.png")); play_temp = true; IsPlaying = true; } } catch(MalformedURLException e1) { e1.printStackTrace(); } } }

33、); menuItem_Addfile.addMouseListener(new MouseAdapter(){ //单击list中“向列表中添加”事件 public void mousePressed(MouseEvent e) { JFileChooser fileChooser = new JFileChooser(); //实例化文件选择器 fileChooser.setMultiSelectionEnabled(true); //可以同时选中多个文件 fileChooser.setFileFilter(new MyFileFilter()); //设置文件选择时选

34、择的文件的默认类型 fileChooser.showOpenDialog(ppp.this);//显示对话框 File[] mediaFiles= fileChooser.getSelectedFiles(); //得到选择的文件 for(int i=0;i

35、mediaFiles[i].getPath(); //必须加"file:/"才能播放选中的文件 System.out.println(path); startPlayer(path); but_play.setIcon(new ImageIcon("pause.png")); play_temp = true; IsPlaying = true; } } }); menuItem_deleteAll.addMouseListener(new MouseAdapter(){ //单击list中“清除播放列表”事件 public void mousePressed(Mo

36、useEvent e) { model.removeAllElements(); fileName.removeAllElements(); fileDirection.removeAllElements(); }); } /******************************************************/ public void addPlayMenuListener(){ //对菜单条的鼠标事件进行处理 file.addMouseListener(new MouseAdapter(){ public void mousePressed(

37、MouseEvent e) { //file.remove(open); //file.remove(exit); //file.add(open); //file.add(exit); } }); single_play.addActionListener(new ActionListener(){ //打开退出按钮事件处理 public void actionPerformed(ActionEvent event) { isSingle_play=true; isSingle_loop=false; isLoop_play=false; isRandom_play=

38、false; } }); single_loop.addActionListener(new ActionListener(){ //打开退出按钮事件处理 public void actionPerformed(ActionEvent event) { isSingle_play=false; isSingle_loop=true; isLoop_play=false; isRandom_play=false; } }); loop_play.addActionListener(new ActionListener(){ //打开退出按钮事件处理 public void

39、 actionPerformed(ActionEvent event) { isSingle_play=false; isSingle_loop=false; isLoop_play=true; isRandom_play=false; } }); random_play.addActionListener(new ActionListener(){ //打开退出按钮事件处理 public void actionPerformed(ActionEvent event) { isSingle_play=false; isSingle_loop=false; isLoop_p

40、lay=false; isRandom_play=true; } }); random_play.setSelected(true);//默认为随机播放 playOrpause.addActionListener(new ActionListener(){ //播放暂停按钮事件处理 public void actionPerformed(ActionEvent event) { if(player==null){ System.out.println("你没有开始播放任何文件"); return; } if (play_temp) { player.start();

41、but_play.setIcon(new ImageIcon("pause_.png")); play_temp = false; } else { player.stop(); but_play.setIcon(new ImageIcon("play_.png")); play_temp = true; } } }); stop.addActionListener(new ActionListener(){ //单击停止按钮事件处理 public void actionPerformed(ActionEvent event) { if(player==null){ S

42、ystem.out.println("你没有开始播放任何文件"); return; } if(timeThread!=null) timeThread.stop();//不做这一步jslider_progress还会变化 player.stop(); player.close(); panel_up.remove(visualMedia);//不做这一步看不到gif图画 jslider_progress.setValue(0); } }); open.addActionListener(new ActionListener() { //打开文件按钮事件处理 //@Sup

43、pressWarnings("deprecation") public void actionPerformed(ActionEvent event) { JFileChooser fileChooser = new JFileChooser(); //实例化文件选择器 fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);//设置文件打开模式为仅打开文件 int result = fileChooser.showOpenDialog(ppp.this);//显示对话框 if (resul

44、t == JFileChooser.APPROVE_OPTION) { //得到用户行为 mediaFile = fileChooser.getSelectedFile(); //得到选择的文件 fileDirection.add(fileChooser.getSelectedFile()); fileName.add(fileChooser.getSelectedFile().getName()); model.addElement(fileChooser.getSelectedFile().getName()); list.setSelectedValue(fileChooser

45、getSelectedFile().getName(), true); } if (mediaFile != null) { try { startPlayer(mediaFile.toURL().toString());//转换成URL后再转换成字符串才行 } catch (MalformedURLException e) { e.printStackTrace(); } //开始播放打开的文件 } } }); exit.addActionListener(new ActionListener(){ //打开退出按钮事件处理 public void actionPe

46、rformed(ActionEvent event) { System.exit(0); } }); about.addActionListener(new ActionListener(){ //打开关于按钮事件处理 public void actionPerformed(ActionEvent event) { JFrame f = new JFrame("Message"); f.setBounds(520, 400, 400, 100); //设置jframe显示的位置,长宽 Container container=f.getContentPane(); f

47、setLayout(null); JTextArea jTextArea = new JTextArea("Java视频播放器原始版"); String string="\n"+"组员:程飞(20065265),代金龙(20065231)"; jTextArea.append(string); jTextArea.setBounds(0, 0, 400, 70); jTextArea.setEditable(false); //设置文本为只读的 container.add(jTextArea); f.setVisible(true); } }); help_.addAc

48、tionListener(new ActionListener(){ //打开关于按钮事件处理 public void actionPerformed(ActionEvent event) { JFrame f = new JFrame("Message"); f.setBounds(520, 400, 400, 150); //设置jframe显示的位置,长宽 Container container=f.getContentPane(); f.setLayout(null); JTextArea jTextArea = new JTextArea("使用说明\n");

49、 String string="各个按钮的具体功能:"+"\n"+"1.双击屏幕全屏,再次双击回到原来大小"+"\n"+"2.双击播放列表文件可直接播放" +"\n"+"3.右击播放列表可添加或删除列表"; jTextArea.append(string); jTextArea.setBounds(0, 0, 400, 150); jTextArea.setEditable(false); //设置文本为只读的 container.add(jTextArea); f.setVisible(true); } }); } /**************************

50、/ public void addFrameChangeListener(){ //对改变窗体大小事件进行处理 container.addComponentListener(new ComponentAdapter(){//处理窗体大小改变时其它组建跟随改变 public void componentResized(ComponentEvent e){ int WIDTH= getWidth(); int HEIGHT=getHeight(); panel_up.setBounds(0,0,WIDTH-140, HEIG

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服