# 3天 完成小慕听书项目 **Repository Path**: packagejava/p_3-days-complete-the-project ## Basic Information - **Project Name**: 3天 完成小慕听书项目 - **Description**: 练习:3天 完成小慕听书项目 https://class.imooc.com/lesson/1890 - **Primary Language**: Java - **License**: BSD-3-Clause-Clear - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-06-17 - **Last Updated**: 2025-06-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 3天 完成小慕听书项目 #### 介绍 练习:3天 完成小慕听书项目 https://class.imooc.com/lesson/1890 ### 第1章 课前准备 #### 1-2 课程前导介绍 1. Java训练营-小慕听书项目实战 2. 课程介绍 + ◆通过图文+视频方式掌握Java Swing编程的基本知识 + ◆介绍”小慕听书”背后的实现原理,讲解讯飞SDK的使用方法 + ◆老齐手把手带你开发“小慕听书”项目,实现文章朗读功能 3. 界面: images\p1_2_ui.png 4. 课程特点 + ◆全案例驱动,大白话带你轻松学习Java + ◆老师手把手带着做,不放过每-一个开发细节 + ◆视频+文档相辅相成,图文并茂相得益彰 + ◆课后任务+扩展练习,将知识融会贯通 5. 第一天重点内容 + ◆了解Java的基础知识,搭建Java开发环境 + ◆重点讲解利用JFormDesigner绘制Swing界面的技巧 + ◆学习总结Java基础语法,了 解各种开发细节 6. 第二天重点内容 + ◆讲解讯~飞语音SDK的申请步骤与使用方法 + ◆讲解JAVA面向对象编程的基础知识 + ◆将讯飞语音SDK结合界面实现文本朗读功能 7. 第三天重点内容 + ◆实现男女声、方言、语音语调的切换 + ◆讲解Java如何实现文件的读写操作 + ◆实现导入文件功能,支持长文本朗读 8. 建议学习方法 + ◆第一遍“看”,不要着急做,先理解每一个知识点的用途 + ◆第二遍“抄”,跟老师照着做实现各项任务 + ◆第三遍“做”, 脱离老师,争取自己能实现类似的功能 #### 1-3JVM、JRE、JDK的区别与联系 1. Java程序是在JVM上运行,因此在开发程序前需要配置Java环境,首先要做的就是JDK的安装和配置,那么JVM, JRE, JDK有什么区别和联系呢?下边将带你了解他们之间的关系。 2. 首先介绍一下JVM, JRE, JDK: + JVM是Java虚拟机(Java Vitual Machine)的缩写,是整个Java实现跨平台的最核心的部分。JVM负责解释执行字节码文件,是运行Java字节码文件的虚拟计算机。 + JRE是Java运行环境(Java Runtime Environment)的缩写,包括JVM以及Java核心类库和支持文件 (核心类库是Java提供的可以直接使用的类,后面课程中会介绍)。 - 如果只需要运行Java程序,下载并安装JRE即可。 + JDK是Java的开发I胞(Java Development Kit)的缩写,提供了编译,运行Java程序所需的各种工具和资源。如果要开发Java程序,需要安装JDK. 3. JVM, JRE, JDK三者的关系: + JRE= JVM +JavaSE标准类库 + JDK=JRE+开发工具集(例如Javac编译工具等) 4. 关于什么是字节码文件,来看-下下面的图: Java程 序的执行过程包括编译和执行两个步骤,Java程序的源文件是-个以java命名的文件,代码就写在这个java文件中。java文件经过编译器的编译生成字节码文件,也就是下图中的class为后缀名的文件。执行程序的时候,就是用解释器执行字节码文件。 5. Tip:在这篇介绍文章中,会涉及到一些专业术语,大家可以先进行了解,随着学习内容的不断增多和深入才能够更好地进行理解。 #### 1-4 JDK下载与安装[ Windows版] >java -version java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode) #### 1-5 JDK下载与安装[Mac版] #### 1-6 什么是集成开发环境 #### 1-7 IntelliJ IDEA安装与配置[Windows版] #### 1-8 IntelliJ IDEA安装与配置[Mac版] ### 第2章 任务1:界面绘制 #### 2-1 Swing介绍之常见界面组件 1. Swing是Java新-代的图形界面技术。Swing 是-种轻量级组件,它采用纯Java实现,不再依赖于操作系统,所以可以在所有平台上保持相同的运行效果,对跨平台支持比较出色。除此之外,Swing 提供了丰富的界面组件与便捷的使用方法,是JAVA领域开发界面应用程序的首选技术。本次课程我们就利用Swing提供的各种组件来开发 2. “小慕听书程序界面。 3. 下面来看一下Swing的常 见界面组件: + 下图是小慕听书程序最终的界面,我在图中用红字标出了的各种组件名。 + 下边咱们了解下Swing中具体提供了哪些常用组件吧。 1. JFrame 框架窗口 > JFrame用来设计类似于Windows系统中窗口形式的界面,运行时生成一个具有标题栏、 最小化、最大化、关闭按钮的窗口。JFrame 是Swing组件的基础,用来显示程序界面。 2. JPanel面板 > JPanel是界面的“画板”,其他诸如按钮、滑块、文本框组件都要放置在JPanel面板 上,同时JPanel又 必须嵌入在JFrame框架窗口中才能被显示出来。 3. JButton按钮 > JButon按钮是开发时最常用的组件,用于接收鼠标的点击操作。 4. JLabel标签 > JLabe标签用于在界面上显示文本。 5. JTextField文本框 > JTextField文本框是一个单行文本框, 它允许用户输入单行的文本信息。 6. JTextArea文本域 > JTextArea文本域与JTextField文本框最大区别是文本域允许用户输入多行文本信息。 7. JComboBox下拉列表 > JComboBox下拉列表的特点是将多个选项折叠在一起供用户选择。 8. 除此以外,还有单选框、复选框、滑块、密码框等等几十种常用的Swing界面组件,在这就不一介绍了 ,在后面我们学习安装好JFormDesigner设计器,同学们可以自己通过拖拽的方式直观的看到这些组件的使用方法。 #### 2-2 Swing介绍之界面布局管理器 + 在前面提到JPaneI面板是其他组件的“画板”,这里就衍生出一个新名词“布局管理器(L ayout Manager)"。布局管理器就是安排文本框、按钮这些组件是如何排布到JPanel界面上的方案,这里我为你介绍三种常见的布局方案,这对以后你进入工作进行界面设计也是有帮助的。 1. Border布局方案。 Border是把组件按“ 上下左右中”的方式进行排布,是早期Java应用常见的界面布局方式。 > Border布局在很多软件系统中延用至今,是界面设计的经典布局,如下图所示: 2. Flow布局方案。流式布局是根据界面大小自动调整组件的位置,如下图所示: > 流式布局在现在网站中十分常见,因为访问网站的设备可能是手机、Pad, 也可能是PC,不同分辨率下为了保证界面的整体美观,可以采用流式布局动态对组件位置、大小进行调整。 3. Null布局方案。 灵活布局是无任何规则限制的布局方式,开发者可根据自己的意愿任意将界面组件放置在任意位置,-切处理的细节均有程序员自己设计, 本次“小慕听书"就采用NuI布局进行设计。 #### 2-3 IDEA JFormDesigner插件安装与使用 + 在IDEA工具中支持插件扩展,有一款名为JFormDesigner的插件允许开发者使用可视化的方式设计Swing界面,通过这个插件可以极大简化Swing界面开发的难度。 + 那这一小节,我来带着你安装并快速上手JFormDesigner. + JFormDesigner-7 0-1teli-idea zip可在右侧资料区下载 + 或在JFormDesigner官网下载 + https://www.formdev. com/jformdesignerdownload/ + 关于布局管理器,老师在2-2 Swing介绍之界面布局管理器有详细讲解,同学可以回顾-下。 + 刚刚我们通过IDEA引入JFormDesigner插件创建了第一个应用界面, 下一节咱们根据小慕听书应用的具体要求,来绘制应用的主界面吧。 + 代码: firstjava #### 2-4 绘制基础界面 1. JFORM: this 916x804 (900x765) + background:153,153,153 + foreground:51, 51, 51 2. JLABEL ​+ x:55,y:40,width:40,height:24 ​+ font: 黑体 Plain 20 ​+ foreground:white ​+ text: 文件 3. JTEXTField: ​+ x:110,y:35,width:605,height:35 4. JButton: ​+ 730,35,105,35 ​+ font: 黑体 Plain 20 + text: 选择 ​+ foreground:white ​+ background: 8,145,224 5. JTextArea ​+ 25,85,845,370 6. JLABEL + x:140,y:470 + text: 语速 7. JLABEL + x:140,y:505 + text: 音量 8. JSlider ​+ x:220,y:475,width:530 ​+ opaque:false 9. JSlider + x:220,y:510,width:530 + opaque:false #### 2-5练习任务一:绘制基础界面 + 恭喜同学看到这一节,俗话说,“纸 上得来终觉浅,绝知此事要躬行”,想必同学也跃跃欲试的想完成老师刚刚讲的内容吧,下边就请同学根据视频内容 ,完成以下任务吧! + 步骤一个: 按照老师的讲解,完成环境的搭建。 + 步骤二: 使用idea创建一个项目 。 + 步骤三:创建一个新的JFormDesigner Form + 步骤四:创建主界面的组件 1、创建一 个宽高: 900,765的主界面 2、在主界面中创建一个标签 1)其x, y坐标分别为: 55,40 2)宽高分别为: 40.24 3)标签的文本改为:文件" 4)文本字体为:黑体普通不加粗号: 20 5)文本字体颜色设置为白色 6)主界面的背景颜色为153,153,153 3、在主界面中创建一个文本框 1)其x,y坐标分别为: 110, 35 2)宽高分别为: 605 ,35 4、在主界面创建一个按钮 1)其x,y坐标分别为: 730, 35 2)宽高分别为: 105 ,35 3)文本设置为:“选择" 4)文本字体为:黑体普通不加粗字号: 20 5)文本字体颜色设置为白色 6)按钮背景颜色设置为: 8, 145, 224 5、在主界面创建一个文本域 1)其x, y坐标分别为: 25, 85 2)宽高分别为: 845 ,370 6、添加一个标签,做为语速标签 1)其x, y坐标分别为: 140, 470 2)宽高分别为: 40 ,24 3)标签的文本改为:“语速” 4)文本字体为:黑体普通不加粗字号: 20 5)文本字体颜色设置为白色 7、添加一个标签,做为音量标签 1) 其x,y坐标分别为: 140, 505 2)宽高分别为: 40 ,24 3)标签的文本改为:“音量” 4)文本字体为:黑体普通不加粗字号: 20 5)文本字体颜色设置为白色 8、添加滑块组件 1)其x,y坐标分别为: 220, 470 2) 宽高分别为: 530 ,默认 3)背景色设置为透明 9、添加滑块组件二 1) 其x,y坐标分别为: 220, 505 2)宽高分别为: 530 ,默认 3)背景色设置为透明 到此,本节任务就结束啦,最后我们会做出这样一个界面: #### 2-6 绘制图形按钮 + 在上一讲通过JFormDesigner绘制了界面的上半部分。 + 下面来绘制界面下方的图形按钮。这里涉及的细节比较多,可以先通过视频学习,之后对界面中涉及的主要属性进行总结归纳。 #### 2-7 练习任务二:播放按钮的构建 #### 2-8任务总结 ### 第3章[知识加油站] Java必备语法 #### 3-1 我的第一个Java程序 #### 3-2 第一个Java程序常见问题 #### 3-3 编程练习 #### 3-4选择练习 #### 3-5 数据类型与变量 #### 3-6 编程练习 #### 3-7 标识符与关键字 #### 3-8 选择练习 #### 3-9注释 #### 3-10算术运算符 #### 3-11编程练习 #### 3-12 if多分支判断 #### 3-13 i书写中的常见错误演示 #### 3-14 编程练习 #### 3-15 关系运算符与布尔类型 #### 3-16 Java方法 #### 3-17 编程练习 ### 第4章 课程总结 #### 4-1 课程总结 > 阶段一 · 第二天 实现语音阅读功能 ### 第1章课前准备 #### 1-1 获取课程资源 #### 1-2 第二天课程概述 1. 讲解JAVA面向对象编程的基础知识 2. 讲解讯飞语音SDK的申请步骤与使用方法 3. 将讯飞语音SDK结合界面实现文本朗读功能 ### 第2章知识加油站-Java面向对象 #### 2-1 类的概念及定义 #### 2-2什么是对象 #### 2-3 对象的实例化 #### 2-4 构造方法 #### 2-5 编程练习 #### 2-6 包的使用 #### 2-7 对象属性使用细节 #### 2-8 访问修饰符 #### 2-9 对象属性的书写技巧 #### 2-10 对象方法的书写技巧 #### 2-11 编程练习 #### 2-12 编程练习 #### 2-13 Java继承 ### 第3章任务2:语音播放功能实现 #### 3-1 开通讯飞语音合成服务 1. 实现讯飞语音接入流程 2. https://www.xfyun.cn/ 3. 讯飞语音的接入流程 + 开通语音合成服务,获取认证授权信息 + 设置不同语音合成参数,发送文本到语音服务器 + 语音服务器生成MP3语音文件, Java下载到本地保存 + Java程序播放MP3文件,实现文本朗读功能 #### 3-2 练习任务三: 开通讯飞语音合成服务 恭喜同学看到这一节,离成功又近了-步,想必同学已经完成了纯图片的播放按钮构建吧,本次任务我们要完成开通讯飞语音合成的服务,下边就请同学根据视频内容 , 完成以下任务吧! + 步骤一: 访问www.xfyun.cn完成注册讯飞的账号 + 步骤二: 选择免费测试包,并创建自己的应用 - 应用名称 :小慕听书 - Tips:由于这里不可以重名,同学们可以起个其他的名字 + 步骤三: 记录自己的服务接口认证信息: APPID、APISecret. APIKey > 到此,本节任务就结束啦,本节任务中,我们了解讯飞语音的服务,开通了在讯飞的应用,在实际工作中,我们常常要去调用第三方提供的这些已经做好的服务,让我们站在巨人的肩膀上,攀登更高的山峰。同学们一定要和老师一起动手完成哦~ #### 3-3 实现语音合成功能 #### 3-4 练习任务四:封装 语音播放模块 恭喜同学看到这一节, 想必同学已经完成了讯飞服务的注册等任务,本次任务我们要完成语音播放模块,下边就请同学根据视频内容,完成以下任务吧! + 步骤一: 引入老师封装好的artts-utis. jar以tts-utils-sources.jar + 步骤二:创建VoiceTestor类 + 1、声明main方法,在main方法中创建T TS对象 + 2、设置TTS的appid. apiKey. apisecret. voiceL ocation属性的值 + 3、调用方法生成认证数据 + 4、调用方法生成语音文件下载到本地磁盘 - (1)要生成的语音文本可自定义 - (2)设置声音为xiaoyan"或aisjuxu"等 - (3)建议设置音量和语速在40~70之间 - (4)打印出语音下载到磁盘的地址 + 5、调用方法播放生成的语音文件 ### 第4章任务3:按钮单击响应实现 #### 4-1 Swing事件机制 + Swing事件机制 > 当用户点击图形界面上的一个按钮或者其他组件时要有所响应,这才能实现图形界面的交互功能。如何做出这些响应,我们就需要了解事件的处理机制。 + 什么是事件处理 > 当某个事件发生时,例如点击按钮变会产生"MouseClicked (鼠标单击)“事件, 我们希望在这个时机执行一些代码来做我们希望做的事,这个就是事件处理。其他常见的事件还有如:在文本框的内容改变时产生Change事件,或者鼠标在界面上移动产生的"MouseMoved (鼠标移动)“事件等。 + 事件处理中的三要素 > 以“确定按钮点击后关闭对话框”为例 + 事件源:代表哪个组件被操作了,这里 确定按钮就是事件源 + 事件:产生了什么操作,这里“单击“就是事件 + 事件监听器:监听器是一个抽象的概念, 它被安装在某个组件.上,当监听器监控到某个事件被触发就会执行响应的处理代码,例如:鼠标监听器监听到用户在确定按钮上 按下鼠标按键,就会产生"关闭对话框的处理。 下面我们通过一份代码片段梳理讲解Swing事件处理。 > JButton btnClose = new JButton(); //1 btnClose.setText("关闭");//2 ... btnClose.addMouseListener( //3 (MouseAdapter)mouseClicked(e)->{//4 System.out.println("网络连接已关闭") } ); + 第1、2,两句话在当前Swing界面创建了一个按钮, 名为btnClose, 显示文本设置为“关闭"。 + 第3行,btnClose. addMouseListener()便是为关闭按钮绑定一个鼠标事件的监听器,当btnClose按钮 上产生的鼠标点击、移入、移出、拖放等与鼠标相关的操作,MouseListener监听器都会监听到并触发相应的处理代码。除addMouseL istener()外,还有addKeyListener()用于监听键盘的打字事件,或者addChangeListener)用于监听组件内容的改变。 + 第4行,new MouseAdapter()鼠标适配器, new MouseAdapter()用于执行具体的事件处理代码,例如MouseListener)监听到用户点击 了按钮,那MouseAdapter便会自动执行mouseClicked0方法中书写的“网络连接已关闭”的输出语句。 + 触发不同的鼠标事件对应不同的MouseAdapter,当鼠标从按钮点击区域离开的一瞬间, 便会被MouseL istener捕捉到触发执行MouseAdapter.mouseExited()的代码。不同的事件对应了不同的触发方法。 > JButton btnClose = new JButton(); btnClose.setText("关闭"); ... btnClose.addMouseListener( (MouseAdapter)mouseExited(e)->{ System.out.println("鼠标已从按钮上离开") } ); > //鼠标事件监听器,addKeyListener()键盘事件监听器 Swing组件.addMouseListener( //MouseAdapter提供了鼠标事件的处理方法 //常用事件名: //mouseCliecked() -> 鼠标单击 //mouseEntered() -> 鼠标移入组件 //mouseExited() -> 鼠标移出组件 //mouseMoved() -> 鼠标在组件上移动 (MouseAdapter)事件名(e)->{ //处理代码 } ); #### 4-2 扩展学习资料: JOptionPane内置对话框 + JOptionPane是一种Swing提供的内置对话框的类, 通过内置方法可以非常便捷的生成不同类型对话框。它提供了几种固定形式的使用办法,主要涉及四种类型对话框。 1. ●showMessageDialog():消息对话框,用于提示信息,只有确定’按钮 2. ●showConfimDialog0: 询问用户是否确认,默认有两个按钮”是”、“否”。m 3. ●showlnputDialog(): 输入对话框,弹出一个包含文本框的对话框,要求用户输入 4. ●showOptionDialog(): 备选项对话框,弹出多按钮对话框,用户从中进行选择 + 其中,showMessageDialog(消息对话框是最常用的对话框类型,本文我们重点讲解showMessage对话框。 + 消息对话框标准用法: + JOptionPane.showMessageDialog(父容器,内容标题,消息类型); . 1. 父容器是指消息对话框的载体,绝大多数情况下设为null,即不需要父容器。 2. 内容,标准对话框显示的部分。 3. 标题,标题栏显示的文字。 4. 消息类型,消息的内容级别,内置- -下几种,不同的类型拥有不同的图标: + ●ERROR_MESSAGE -错误消息 + ●INFORMATION_MESSAGE --般信息 + ●WARNING_MESSAGE -警告 + ●QUESTION_MESSAGE -询问 + ●PLAIN_MESSAGE -空白不带图标 + 下面是showMessageDialog()的演示代码: + JOptionPane.showMessageDialog(null, " 错误" , '提示" ,JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(null, "警告","提示",JOptionPane.WARNING_MESSAGE); + JOptionPane.showMessageDialog(null, "普通","提示",JOptionPane.INFORMATION_MESSAGE); + JOptionPane.showMessageDialog(null, "提问信息","提示",JOptionPane.QUESTION_MESSAGE); + JOptionPane.showMessageDialog(null, "不带图标","提示",JOptionPane.PLAIN_MESSAGE); #### 4-3 Swing事件处理机制 > public static void main(String[] args) { // Swing框架,用于生成一个容纳界面的窗口 JFrame jFrame = new JFrame(); jFrame.setSize(700,630); jFrame.setTitle("LiLi语音合成"); SwingEvent swingEvent = new SwingEvent(); jFrame.setContentPane(swingEvent);//加载单击事件 jFrame.setVisible(true); jFrame.setResizable(false);//不能重置大小 jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出 } private void btnClickMouseClicked(MouseEvent e) { // TODO add your code here System.out.println("Click Me!"); JOptionPane.showMessageDialog(null,"触发了单击事件","Click Me!",JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(null,"触发了单击事件","Click Me!",JOptionPane.ERROR_MESSAGE); } #### 4-4 组件联动与Event对象的开发技巧 #### 4-5 练习任务五:完成按... ### 第5章任务4:语音与界面整合实现 #### 5-1 结合Swing界面实现.. #### 5-2练习任务六:语音5与... ### 第6章课程总结 #### 6-1课程总结