JAVA语言程序设计教程 第9章
9Java程序设计教程 第九章 网络编程
Java程序设计教程
Java程序设计教程
第 11 页
UDP协议和TCP协议简单对比
第九章
网络编程
TCP协议可靠,传输大小无限,但是需要连接建立时间,差 错控制开销大。UDP协议不可靠,差错控制开销较小,传输 大小限制在64KB以下,不需要建立连接,通信效率很高。
Java程序设计教程
Java
语 言 程 序 设 计
Java程序设计教程
第2 页
第九章 网络编程
Java程序设计教程
第3 页
学习目标
任务1:网络通信协议 任务2: TCP/IP协议 任务3: UDP协议
第九章
网络编程
(1) Java网络通信 (2) U程
Java程序设计教程
第4 页
网络通信协议
第九章
网络通信协议通常由三部分组成:
(1)一是语义部分,用于决定双方对话的类型; (2)二是语法部分,用于决定双方对话的格式; (3)三是变换规则,用于决定通信双方的应答关系。
网络编程
Java程序设计教程
Java程序设计教程
第5 页
TCP/IP协议
第九章
网络编程
TCP/IP协议是一种可靠的网络协议,它在通信的两端各建立 一个Socket,从而在通信的两端之间形成网络虚拟链路。一
集信息包,并将其按适当的次序放好传送,接收端收到后再 将其正确地还原。
Java程序设计教程
Java程序设计教程
第8 页
TCP/IP协议
第九章
网络编程
TCP协议保证了信息包在传送过程中准确无误。TCP协议使用 重发机制,当一个通信实体发送一个消息给另一个通信实体 后,需要收到另一个通信实体的确认信息,若没有收到另一 个通信实体的确认信息,则会再次重发刚才发送的信息。
Java程序设计教程 第九章
9.1.2ava中,每个线程从创建到消亡为一个生 Java中,每个线程从创建到消亡为一个生 存周期,它将经历四个状态: (1)新建状态(New Thread Status )新建状态(New (2)可执行状态(Runnable) )可执行状态(Runnable) (3)阻塞状态(Blocked) )阻塞状态(Blocked) (4)消亡状态(Dead thread) )消亡状态(Dead thread)
9.1.2 线程的控制
4. 终止一个线程 在程序中不能任意终止一个线程,否则可能 造成严重的线程安全问题.一个线程的终止 必须靠run()方法的正常返回.当一个线程从 必须靠run()方法的正常返回.当一个线程从 run()方法返回后,它就进入消亡状态,再也 run()方法返回后,它就进入消亡状态,再也 不能被运行了.结束run()方法还有另一种途 不能被运行了.结束run()方法还有另一种途 径,那就是在run()方法中抛出了异常,如果 径,那就是在run()方法中抛出了异常,如果 这些异常没有被捕获,JVM将会终止该线程. 这些异常没有被捕获,JVM将会终止该线程.
9.1.1 线程的概念
与程序的顺序执行相对的是程序的并发执行, 即一组逻辑上互相独立的程序或程序段在执 行过程中,其执行时间在客观上互相重叠. 程序的并发执行可以分成两种情况:一种是 多道程序系统中多道程序的并发执行,此种 情况下实际上是宏观上(程序级)同时进行, 微观上(指令级)顺序执行的;另一种是在 某道程序段的几个程序片段中,包含着一部 分可以同时执行或顺序颠倒执行的代码.程 序的并发执行是实现多线程技术的基础.
9.1.1 线程的概念
线程与进程类似,是一段完成特定功能的代 码.它是程序中单个顺序的控制流,也是一 个进程内的基本调度单位.线程和进程一样 拥有独立的执行控制,并由操作系统负责调 度.同一进程可以包含多个线程,这些线程 共享属于该进程的一块内存空间和一组系统 资源;而线程自身的数据通常只有微处理器 的寄存器数据,以及一个供程序执行时使用 的堆栈.系统在产生一个线程,或者在各个 线程之间切换时,负担要比进程小得多.此 外,由于线程只是在单个进程的作用域内活 动,所以线程间的通信也比进程简单.线程 的实现要依靠操作系统,现代操作系统一般 都支持线程技术.
第9章 图形用户界面
Java语言程序设计
第9章 图形用户界面
9.1 GUI概述
Java语言程序设计
第9章 图形用户界面
9.1 GUI概述
ponent类是许多组件类(如Button、Label)的父类,Component类中封装了组件通用的方法和 属性,如图形的组件对象、大小、显示位置、前景色、背景色、边界、可见性等,因此许多组件也继承了 Component类的成员方法和成员变量,这些成员方法是许多组件共有的方法,Component类常见的成员方法 如表9-1所示。
Java语言程序设计
第9章 图形用户界面
9.1 GUI概述
Java应用程序的图形用户界面(GUI)是通过Java API提供的java.awt或javax.swing包中的组件实现的。 这些组件所构成的GUI系统通常包含以下几个部分: (1)基本的图形用户界面组件:如菜单、按钮、文本字段等,展示系统可用的操作; (2)容器组件,如窗口、面板等,用于容纳基本组件; (3)布局管理组件,负责容器中组件的布局,进一步美化图形用户界面; (4)事件处理,用户通过图形界面进行操作时,会引发相应的事件,这些事件由一些特定的图形用户 界面组件监听并处理。 Java的java.awt和javax.swing包中包含了许多有关图形界面的类,AWT(Abstract Window Toolkit),中文译 为抽象窗口工具包,是一组Java类,此组java类允许创建图形用户界面,AWT提供用于创建生动而高效 的GUI的各种组件。Swing组件是在AWT组件基础上发展起来的新型GUI组件,完善了GUI组件的功能, 且实现时不包含依赖特定平台的代码,有更高的平台无关性和更好的移植性。因此本章主要介绍Swing 组件的用法,学习了Swing组件的用法后也可容易地学会AWT组件的用法。
Java程序设计电子教案第九章
上一页 下一页 返回
9.1图形处理 图形处理
// TestColor.Java import java.applet.Applet; import java.awt.Graphics; import java.awt.Font; import java.awt.Color; public class TestColor extends Applet { public void paint( Graphics g ) {
上一页 下一页 返回
9.1图形处理 图形处理
根据题目的要求, 根据题目的要求,我们使用一组随机数来指定直线两个端点 的坐标,并采用循环结构实现10次循环 次循环。 的坐标,并采用循环结构实现 次循环。drawLine方法 方法 中的4个整型参数代表直线两个端点的坐标 个整型参数代表直线两个端点的坐标。 中的 个整型参数代表直线两个端点的坐标。random()是 是 Math类中的一个方法,该方法返回一个 类中的一个方法, 类中的一个方法 该方法返回一个double值,值域为 值 类是java.1ang包的一部分 (0.0,1.0)。Math类是 . , . 。 类是 . 包的一部分 java.1ang可由编译器自动引入,所以我们不必把 可由编译器自动引入, . 可由编译器自动引入 所以我们不必把Math 类引入到程序中。直接调用random方法得到返回值太小, 方法得到返回值太小, 类引入到程序中。直接调用 方法得到返回值太小 在实际应用中往往乘以一个整数因子, 在实际应用中往往乘以一个整数因子,并强制类型转换 为 一个合适的整数。 一个合适的整数。如(int)(Math.random()x100)的 . 的 实际取值范围为[0, 实际取值范围为 ,100]。在图形方式下要想准确定位, 。在图形方式下要想准确定位, 必须了解屏幕坐标系的构成。 必须了解屏幕坐标系的构成。Java定义一个窗口工作区的左 定义一个窗口工作区的左 上角为坐标原点(o, ,以像素点为单位, 上角为坐标原点 ,o),以像素点为单位,顺序向右和向下 延伸。图形的大小如超过窗口,则超出部分不会显示出来。 延伸。图形的大小如超过窗口,则超出部分不会显示出来。
《Java语言程序设计》(第3版)第9章
第9章网络通信【1】java提供了哪几种网络通信模式?[解答]:基于TCP/IP协议的面向连接的通信模式,基于UDP协议的面向无连接的通信模式。
【2】java的套接字网络通信方式分为哪几种?[解答]:基于TCP/IP协议:客户端套接字,服务器端套接字。
基于UDP协议:用户数据报套接字,广播数据报套接字。
【3】什么是socket,怎样建立socket连接?建立连接时,客户端和服务器端有什么不同?[解答]:Socket就是套接字,是IP地址和端口号的组合。
当两个网络程序需要通信时,它们可以通过使用Socket类建立套接字连接。
服务器端建立Socket以后,要执行一个等待的方法,以方便客户端来连接。
客户端建立Socket以后即与服务器端进行连接,成功握手以后,双方产生同样的Socket对象。
【4】请列举常用的协议及其端口号。
[解答]:ftp 21/tcptelnet 23/tcpsmtp 25/tcphttp 80/tcppop3 110/tcpsnmp 161/udphttps 443/tcphttps 443/udppop3 110/tcp【5】试描述用Socket建立连接的基本程序框架。
[解答]:(1)客户端建立套接字对象,指定服务器IP和端口号。
(2)服务器端建立套接字,并指定端口号。
(3)服务器端监听本机的端口的状态:执行accept()方法。
(4)客户端程序在对象产生以后以及,服务器端的程序监听到有连接以后都会产生一个Socket类的实例。
(5)对这两个实例中对应的输入流和输出流进行操作,即完成通信过程。
【6】说明客户端如何与服务器端进行连接。
[解答]:TCP/IP的方式是:客户端产生Socket对象的同时产生与对应端口号的服务器连接的动作。
UDP数据报的方式是:客户端建立DatagramSocket对象,建立报文DatagramPacket对象,并指定发送的IP地址,调用socket对象的send方法进行连接并发送数据。
《Java程序设计案例教程》第09章
public static void main(String[] args) {
❖
//读取E 盘test.txt 中的内容,显示输出
❖
FileInputStream in = null;
❖
int b;
❖
try {
❖
in = new FileInputStream("E:/test.txt");
❖
while ((b = in.read()) != -1) {
▪ 对于这两个read()方法,如果读取文件时发生错误,则会抛出IOException的异常。
Java程序设计案例教程
幻灯片 8,共38页
8
FileOutputStream类
❖ (1)FileOutputStream类的构造方法 ▪ 创建一个指向file文件中写入字节数据的FileOutputStream对象 • public FileOutputStream(File file) throws FileNotFoundException ▪ 创建一个指向File文件中写入字节数据的FileOutputStream对象,且如果第2个参数为true,则将字节数据追加到 文件末尾处,否则将字节数据写入文件开始处覆盖原有的文件 • public FileOutputStream(File file,boolean append) throws FileNotFoundException ▪ 创建一个向具体指定名称为name的文件中写入字节数据的FileOutputStream对象 • public FileOutputStream(String name) throws FileNotFoundException ▪ 创建一个向具体指定名称为name的文件中写入字节数据的FileOutputStream对象,且如果第2个参数为true,则 将字节数据追加到文件末尾处,否则将字节数据写入文件开始处覆盖原有的文件 • public FileOutputStream(String name,boolean append) throws FileNotFoundException
Java语言程序设计课件第9章Java网络编程
• InetAddress 类提供了操作IP地址的各种方法。该类本身没有构造方法,而是通过调 用相关静态方法获取实例。常用方法:
方法名称 boolean equals(Object obj) byte[] getAddress() static InetAddress[] getAHByName(String host)
9.4.1 DATAGRAMPACKET类
• 在TCP/IP协议的传输层除了一个TCP协议之外,还有一个UDP协议。UDP协议是用户 数据报协议的简称,也用于网络数据的传输。虽然UDP协议是一种不太可靠的协议, 但有时在需要较快地接收数据并且可以忍受较小错误的情况下,UDP就会表现出更 大的优势。
9.1 JAVA 网络编程基础知识
• 9.1.1 网络协议 • 9.1.2 套接字和端口
9.1.1 网络协议
• 网络编程的目的就是直接或间接地通过网络协议与其他计算机进行通信。在Java语 言中包含网络编程所需要的各种类,编程人员只需要创建这些类的对象,调用相应 的方法,就可以进行网络应用程序的编写。
9.3.4 传输对象数据
• 经过前面的学习,掌握了如何在服务器开始一个端口监听套接字,以及如何在客户 端连接服务器,发送简单的数字。本次案例将实现如何在客户端发送一个对象到服 务器端,服务器如何解析对象中的数据。
9.4 JAVA UDP通信
• 9.4.1 DatagramPacket类 • 9.4.2 DatagramSocket类
9.3 JAVA TCP通信
• 9.3.1 ServerSocket 类 • 9.3.2 Socket 类 • 9.3.3 客户端与服务器端的简单通信 • 9.3.4 传输对象数据
9.3.1 SERVERSOCKET 类
Java程序设计 第九章 测验答案 慕课答案 UOOC优课 深圳大学继续教育学院
测验-9.2窗体一、多选题 (共100.00分)1.使用Swing编程时,如果要保证线程安全,需要使用哪几种线程:A.初始化线程B.事件调度线程C.工作线程正确答案:A B C测验-9.3菜单一、判断题 (共100.00分)1.快捷键是为了提升效率而设,菜单项一定要设置快捷键。
A.正确B.错误正确答案:B2.助记符是为了提升效率而设,菜单项一定要设置助记符。
A.正确B.错误正确答案:B测验-9.4布局管理一、判断题 (共100.00分)1.为了实现复杂的界面布局,JFrame的内容区可以设置多个Layout。
A.正确B.错误正确答案:B答案解析:只能设置一个。
可以添加JPanel,然后在JPanel上再设置其他布局。
测验-9.5常用组件一、判断题 (共100.00分)1.密码框类JPasswordField是文本框类JTextField的子类。
文本框用JTextField.getText()获取文本内容,密码框可以使用JPasswordField.getText()获取密码文本。
A.正确B.错误正确答案:B答案解析:应该使用JPasswordField.getPassword()测验-9.6常用对话框一、单选题 (共100.00分)1.String s = JOptionPane.showInputDialog(frame,"请输入您所在城市名称:");上面的代码执行后,会弹出一个输入对话框,如果用户点击对话框右上角上的“X”图标(关闭按钮),那么返回值s是:A.""B.nullC.NULLD.false正确答案:B测验-9.7事件处理一、多选题 (共100.00分)1.下面哪些是正确的?A.MouseAdapter是一个类B.MouseAdapter是一个接口C.MouseListener是一个类D.MouseListener是一个接口正确答案:A D。
JAVA语言程序设计第九章
Applet中的事件处理 中的事件处理
提倡使用监听器方法。 提倡使用监听器方法。
22
Applet重要成员方法——HTML标志方法 重要成员方法 标志方法
URL getDocumentBase( ) 返回一个URL对象,描述包含 对象, 标记的HTML 返回一个 对象 描述包含applet 标记的 文件的目录。 文件的目录。 URL getCodeBase( ) 返回描述applet主类文件所在目录的 主类文件所在目录的URL对象。 对象。 返回描述 主类文件所在目录的 对象 String getParameter(String name) 返回定义在HTML文件中的 文件中的标志中指定 返回定义在 文件中的 标志中指定 参数的值。 参数的值。
本文由gxc530528贡献
ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
第九章 Applet
Applet 基本概念 编写Applet 编写 页中包含Applet 在HTML页中包含 页中包含 Applet中的事件处理 中的事件处理 Applet的重要成员方法 的重要成员方法
重新加载 Applet 退出浏览器
停止运行并释放所有资源。 停止运行并释放所有资源。 停止运行并释放所有资源
9
关键Applet方法 关键Applet方法 Applet
public class Simple extends Applet { …… public void init() { . . . } public void start() { . . . } public void stop() { . . . } public void destroy() { . . . } …… }
Java语言程序设计92java第9章(小应用程序)精品PPT课件
初始态(瞬态)
调用start()方法
运行态
离开Web页面:极小 化或装入其他页面, 调用stop()方法
停止态
重新装入或改变页面 大小或返回Web页面, 调用start()方法
关闭浏览器,调用stop()、 destroy()方法
消亡态
软件学院
Hale Waihona Puke 9.3.1 生命周期中各个方法
▪ init()方法:初始化,自动调用,只执行 一次。主要完成一些在Applet构造方法所 不能完成的工作。 ▪start()方法:初始化后,自动调用。是 Applet的主体,在其中可以执行一些任务 或启动相关的线程来执行任务。
}
软件学院
9.2.3 在启动函数中显示图形界面
▪ 小程序中没有main函数,也不从main函数开始 ▪ 小程序有4个函数,在启动与停止时自动调用 ▪ 初始化小程序:
➢ public void init(); 加载小程序时自动调用,完成初始化过程
▪ 执行小程序: ➢ public void start(); ▪ 在初始化以后调用,不需要再次初始化
9.2.5 小程序的编译与运行
▪ 首先,将源程序进行编译,得到二进制文件 ▪ 随后,将二进制文件与HTML文件放在一个
目录下 1. 打开HTML文件时,浏览器会自动调用
Java小程序 2. 命令行 “appletviewer Test. html”,会自
动提取并显示小程序
软件学院
9.3 小程序的生命周期
public void init() { JPanel p = new JPanel(); JLabel lbl = new JLabel("Java小程序测试。"); p.add(lbl); getContentPane().add(p); System.out.println(“init:初始化”);
java语言第9章
Applet Applet
4
9.1 Applet概述 续) 概述(续 概述
——例9_1运行结果 例 运行结果
在NetBeans IDE中运行 中运行
Applet Applet 概 述
5
9.1 Applet概述 续) 概述(续 概述
——例9_1运行结果 例 运行结果
编译ex9_1.java产生字节码文件 产生字节码文件ex9_1.class。接下来就需 编译 产生字节码文件 。 要编写一个HTML文件 文件ex9_1.html来嵌入 来嵌入ex9_1.class 要编写一个 文件 来嵌入
11
9.3.2 颜色和字体
Font类——有关字体控制,在java.awt包中 类 有关字体控制, 有关字体控制 包中
名称 描述 一个代表普通字体风格的常量 一个代表黑体字体风格的常量 一个代表斜体字体风格的常量 利用指定的字体、 利用指定的字体、风格和大小创建一 Font对象 个Font对象 返回一个表示当前字体风格的整数值 测试一个字体是否是普通字体风格
方法 public void init() 调用时机和用途 当浏览器(即Applet容器)载入某个Applet时, 容器会自动创建这个Applet类的一个实例,并 调用它的init方法
Applet 应 用 程 序 接 口
8
9.2 Applet应用程序接口 续) 应用程序接口(续 应用程序接口
init方法执行结束之后,自动调用这个方 法。另外,当浏览器用户在访问另一个网 址之后重新返回applet所在的HTML页时, 将再次调用start方法 public void start方法启动后调用此方法,另外每次需 paint(Graphics g) 要重绘applet时也将调用该方法。程序通 常不直接调用paint public void 在响应用户和Applet的交互时经常要用到。 repaint() 通常只是调用,而不重写这个方法。对于 轻量级组件,它调用组件的paint方法,对 重量级组件它调用组件的update方法,由 update调用paint public void 用户离开Applet所在的HTML页时调用该方 stop() 法,它执行挂起Applet所需的所有任务,例 如停止动画和线程 public void 用户关闭浏览器窗口,Applet将从内存中 destroy() 移走的时候调用该方法
JAVA语言程序设计第九章
第9章 Applet基础与高级编程
9.1.6Applet的显示 的显示
Applet本质上是图形方式。 本质上是图形方式。 本质上是图形方式 每次刷新其显示时, 方法。 当Applet每次刷新其显示时,浏览器都调用 每次刷新其显示时 浏览器都调用paint( )方法。 方法 paint()把java.awt.Graphics类的实例作为参数。该实例 ()把 类的实例作为参数。 () 类的实例作为参数 包含了Applet所在 所在Panel的图形上下文信息。 的图形上下文信息。 包含了 所在 的图形上下文信息
第9章 Applet基础与高级编程
9.1.2 Applet的生命周期 的生命周期
Init Start 重新装入 Stop Destroy
装载Appl程
Applet的生命周期 的生命周期
Applet生命周期是指从 生命周期是指从Applet下载到浏览器开始,到 下载到浏览器开始, 生命周期是指从 下载到浏览器开始 用户退出浏览器终止Applet运行的过程。 运行的过程。 用户退出浏览器终止 运行的过程
第9章 Applet基础与高级编程
管理Applet环境的方法 环境的方法 管理
AppletContext getAppletContext()
Applet信息报告方法 信息报告方法
void ShowStatus(String status) String getAppletInfo() String[][] getParameterInfo()
第9章 Applet基础与高级编程
9.2.1 编写Applet的过程 编写 的过程
引入所需的Java API包; 引入所需的 包 定义Applet的主类,该类是Applet类的子类; 的主类,该类是 类的子类; 定义 的主类 类的子类 实现Applet的某些方法; 的某些方法; 实现 的某些方法 嵌入在HTML页面中运行; 页面中运行; 将Applet嵌入在 嵌入在 页面中运行
《Java语言程序设计:基础篇》课后复习题答案-第九章
Chapter9Strings and Text I/O1.s1==s2=>trues2==s3=>falses1.equals(s2)=>trues2.equals(s3)=>truepareTo(s2)=>0pareTo(s3)=>0s1==s4=>trues1.charAt(0)=>Ws1.indexOf('j')=>-1s1.indexOf("to")=>8stIndexOf('a')=>14stIndexOf("o",15)=>9s1.length()=>16s1.substring(5)=>me to Javas1.substring(5,11)=>me tos1.startsWith("Wel")=>trues1.endsWith("Java")=>trues1.toLowerCase()=>welcome to javas1.toUpperCase()=>WELCOME TO JAVA"Welcome".trim()=>Welcomes1.replace('o','T')=>WelcTme tT Javas1.replaceAll("o","T")=>WelcTme tT Javas1.replaceFirst("o","T")=>WelcTme tT Javas1.toCharArray()returns an array of characters consisting of W,e,l,c,o,m,e,,t,o,,J,a,v,a (Note that none of the operation causes the contents of a string to change)2.String s=new String("new string");Answer:CorrectString s3=s1+s2;Answer:CorrectString s3=s1-s2;Answer:Incorrects1==s2Answer:Corrects1>=s2Answer:IncorrectpareTo(s2);Answer:Correctint i=s1.length();Answer:Correctchar c=s1(0);Answer:Incorrectchar c=s1.charAt(s1.length());Answer:Incorrect:it's out of bounds,even if the preceding problem is fixed.3.The output isWelcome to JavaWelcabcme tabc JavaHint:No method in the String class can change the content of the string.String is an immutable class.4.∙Check whether s1is equal to s2and assign the result to a Boolean variable isEqual.boolean isEqual=s1.equals(s2);∙Check whether s1is equal to s2ignoring case and assign the result to a Boolean variable isEqual.boolean isEqual=s1.equalsIgnoreCase(s2);∙Compare s1with s2and assign the result to an int variable x.int x=pareTo(s2);∙Compare s1with s2ignoring case and assign the result to an int variable x.int x=pareToIgnoreCase(s2);∙Check whether s1has prefix"AAA"and assign the result to a Boolean variable b.boolean b=s1.startsWith("AAA");∙Check whether s1has suffix"AAA"and assign the result to a Boolean variable b.boolean b=s1.endsWith("AAA");∙Assign the length of s1to an int variable x.int x=s1.length();∙Assign the first character of s1to a char variable x. char x=s1.charAt(0);∙Create a new string s3that combines s1with s2.String s3=s1+s2;∙Create a substring of s1starting from index 1.String s3=s1.substring(1);∙Create a substring of s1from index1to index 4. String s3=s1.substring(1,5);∙Create a new string s3that converts s1to lowercase. String s3=s1.lowercase();∙Create a new string s3that converts s1to uppercase. String s3=s1.uppercase();∙Create a new string s3that trims blank spaces on both ends of s1.String s3=s1.trim();∙Replace all occurrence of character e with E in s1and assign the new string to s3.String s3=s1.replaceAll(‘e’,‘E’);∙Split"Welcome to Java and HTML"into an array tokens using delimited by a space.String[]tokens="Welcome to Java and HTML".split(‘‘);∙Assign the index of the first occurrence of charactere in s1to an int variable x.int x=s1.indexOf(‘e‘);Assign the index of the last occurrence of string abc in s1to an int variable x.int x=stIndexOf(“abc”);5.No.6.0.e the overloaded static valueOf method in the String class.8.The text is declared in Line2as a data field,but redeclared in Line5as a localvariable.The local variable is assigned with the string passed to the constructor,but the data field is still null.In Line10,test.text is null,which causesNullPointerException when invoking the toLowerCase()method.9.The constructor is declared incorrectly.It should not have void.10.A lowercase letter is between‘a’and‘z’.You can use the staticisLowerCase(char)method in the Character class to test if a character is inlowercase.An uppercase letter is between‘A’and‘Z’.You can use the staticisUpperCase(char)method in the Character class to test if a character is inuppercase.11.An alphanumeric character is between‘0’and‘9’,or‘A’and‘Z’,or‘a’and‘z’.You can use the static isLetterOrDigit(char ch)method in the Character class totest if a character is a digit or a letter.12.The StringBuilder class,introduced in JDK1.5,is similar to StringBuffer exceptthat the update methods in StringBuffer are synchronized.e the StringBuilder’s constructor to create a string buffer for a string,and usethe toString method in StringBuilder class to return a string from a StringBuilder.14.StringBuilder sb=new StringBuilder(s);sb.reverse();s=sb.toString();15.StringBuilder sb=new StringBuilder(s);sb.delete(4,10);s=sb.toString();16.Both string and string buffer use arrays to hold characters.The array in a string isfixed once a string is created.The array in a string buffer may change if the buffer capacity is changed.To accommodate the change,a new array is created.17.(1)Java is fun(2)JavaHTML(3)Jais funva(4)JHTMLava(5)v(6)4(7)Jav(8)Ja(9)avaJ(10)JComputera(11)av(12)va18.The output isJavaJava and HTMLNOTE:Inside the method,the statement s=s+"and HTML"creates a new String objects,which is different from the original String object passed to the change(s,buffer)method.The original String object has not been changed.Therefore,the printoutfrom the original string is Java.Inside the method,the content of the StringBuilder object is changed to Java andHTML.Therefore,the printout from buffer is Java and HTML.19.public static void main(String[]args)can be replaced bypublic static void main(String args[])public static void main(String[]x)public static void main(String x[])but notstatic void main(String x[])because it is not public.20.(1)Number of strings is4Ihaveadream(2)Number of strings is1123(3)Number of strings is0(4)Number of strings is1*(5)Number of strings is(the number of files and directory from where the commandis executed)Displays all files and directory names in the directory where the command isexecuted.21.The\is a special character.It should be written as\\in Java using the Escapesequence.e exists()in the File class to check whether a file e delete()in the Fileclass to delete this e renameTo(File)to rename the name for this file.Youcannot find the file size using the File class.23.No.The File class can be used to obtain file properties and manipulate files,butcannot perform I/O.24.To create a PrintWriter for a file,use new PrintWriter(filename).This statementmay throw an exception.Java forces you to write the code to deal with exceptions.One way to deal with it is to declare throws Exception in the method declaration.If the close()method is not invoked,the data may not be saved properly.25.The contents of the file temp.txt is:amount is32.320000 3.232000e+01amount is32.3200 3.2320e+01falseJava26.To create a Scanner for a file,use new Scanner(new File(filename)).This statementmay throw an exception.Java forces you to write the code to deal with exceptions.One way to deal with it is to declare throws Exception in the method declaration.If the close()method is not invoked,the problem will run fine.But it is a goodpractice to close the file to release the resource on the file.27.If you attempt to create a Scanner for a nonexistent file,an exception will occur.Ifyou attempt to create a Formatter for an existing file,the contents of the existingfile will be gone.28.No.The line separator on Windows is\r\n.29.intValue contains45.doubleValue contains57.8,andline contains'','7','8','9'.30.intValue contains45.doubleValue contains57.8,andline is empty.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在跨平台能力方面,SWT不如Swing优秀。但SWT具有可 以作为本地应用程序实现的优点,性能较高一些,并允许利用 基于SWT的GUI来实现本地兼容性。如果只为一种平台开发系 统,可以优先选用SWT。现在有一些成功的SWT案例,例如 开源集成开发环境Eclipse就是用Java和SWT开发的。
【例9-1】 创建窗体并设置窗体标题以及其他属性,然后 显示窗体。
import Javax.swing.*; public class HelloSwing {
public static void main(String[] args) { JFrame win = new JFrame(“HelloSwing的标题”); win.setSize(250,100); //设置窗口大小 win.setLocation(250,250);//设置窗口位置
综合来讲,Swing 具有内嵌于Java技术的优点,是完全 可移植的,无可争议,它是一种很好的架构。本章后面的章 节将对Swiget Toolkit(SWT),最初是由IBM开发的一 套用于Java的图形用户界面系统,现在由Eclipes基金会负责维 护,与Swing是竞争关系。
第 9 章 图形用户界面设计
9.1 AWT、Swing和SWT 9.2 一个简单例子 9.3 顶层容器 9.4 JFrame窗体 9.5 菜单 9.6 布局管理 9.7 常用组件 9.8 常用对话框 9.9 在Swing组件中使用HTML 9.10 事件处理 9.11 界面外观 9.12 并发编程与线程安全
9.1 AWT、Swing和SWT
9.1.1 AWT
Abstract Windows Toolkit(AWT)是最原始的Java GUI工具 包。AWT 是一个非常简单且功能相对有限,包括GUI组件、 布局管理器和事件的工具包。
AWT可以看做是对原生组件的一个包装,例如在Windows 操作系统下,当生成一个按钮时,Java会通过AWT调用 Windows API来创建原生按钮组件。这样的好处是控件的外观 跟平台上其他软件保持一致,但这也带来问题。因为不同的平 台下,GUI组件不是完全相同的,有些组件只在某些平台上有, 有些组件虽然在各种平台上都有,但是组件的行为却不完全一 致。
//在窗体上添加一个标签 JLabel label = new JLabel(“Hello Swing!”); win.add(label); //关闭窗口时,释放该窗体
win.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); //使窗体可见 win.setVisible(true);
为了使得Java能够“一次编写,到处运行”,AWT只得采 用最大公约数原则,即AWT只拥有所有平台上都存在的组件 的公有集合。最终的结果很不幸,有些经常使用的组件,例如 表、树、进度条等都不支持。对于需要它们的应用程序来说, 都要从头开始创建这些组件,这是一个很大的负担。
此外由于AWT要依赖平台GUI原生组件来实现GUI,导致 GUI的外观和行为(这一点更重要)在不同的平台上会有所不同。 这会导致“编写一次,到处测试(write once, test everywhere, 即 WOTE)”的情况发生,远远不能满足Java开发的要求。
鉴于上述缺点,一般不推荐使用AWT。虽然如此,但 Swing中的一些组件,如字体组件Font、绘图组件Graphics等是 由Java 2D提供的,它们是AWT的一部分。还有Swing中的消息 处理机制,也是采用AWT中的机制,并没有再独创一套。
9.1.2 Swing
Swing是试图解决AWT缺点的一种尝试。在Swing中,开 发了一个经过仔细设计的、灵活而强大的轻量级GUI工具包。 Swing是在AWT组件基础上构建的,例如Swing中的类JFrame 的父类是AWT中的类Frame,因此Swing也可被视作AWT的一 部分,或者为AWT的升级版。Swing 使用了AWT的事件模型 和一些支持类,例如 Colors、Images 和 Graphics。
9.2 一个简单例子
例9-1创建一个窗体,并设置窗体标题以及其他属性,然 后显示窗体。所有的代码都在HelloSwing.Java文件中。
通过例9-1可以看出,创建一个Java GUI程序非常简单。 在main方法中依次创建JFrame对象,设置其属性并显示。程序 代码的每一行功能请参考代码的注释。需要注意的是,这个例 子不是线程安全的,请参考相关编写线程安全的代码。
} } 程序运行结果如图9.1所示。
图9.1 例9-1的运行结果
9.3 顶 层 容 器
Swing中提供的图形界面相关的类大致可以分两类:容 器和组件。容器如JFrame,被用来放置各种组件。组件可以放 到中间容器中,也可以放到顶层容器中。中间容器有JPanel等, 顶层容器有JFrame、JDialog和JApplet。
Swing的特殊之处在于它是用纯Java写成的,因此里面的 组件称之为轻量级组件。Swing因为是用Java写成,所以它的 一大优点就是可以跨平台运行,可以在所有平台上采用统一的 行为。但轻量级组件的缺点是执行速度较慢。
轻量级组件在不同的平台上有相同的外观,这会使得 Windows下的Java程序界面不像Windows程序,Linux下的 Java程序界面不像Linux程序,它们只像Java程序,这会使得 程序的界面风格跟平台不一致。为解决这一问题,Swing现 在实时更换程序的外观主题(各种操作系统默认的特有主题), 然而它不是真的使用平台提供的原生主题,而是仅仅在表面 上模仿它们。