Java程序设计教程 第九章
Java语言程序设计教程第九章

Java中的容器分为顶层容器、中间容器和特殊 容器三大类。其中,顶层容器是GUI的基础, 其它所有的组件都是直接或间接显示在顶层容 器中的。在Swing中有三种顶层容器,分别是 JFrame(框架窗口,即通常的窗口)、 JDialog(对话框)、JApplet(用于设计嵌入 在网页中的Java小程序)。 中间容器是可以 包含其它相应组件的容器,但是中间容器不能 单独存在,必须依附于顶层容器。Java常见的 中间容器有JPanel、JPanel、JScrollPane等 。还有一些特殊容器如JLayeredPane、 JRootPane 、JInternalFrame等。本书只列举 三个常用容器JFrame、JDialog和JPanel。
9.3 容器、组件和布局
在学习GUI的编程的时候,必须很好的掌握和理解容 器类(Container)和组件类(Component)。Component 类及其子类的对象用来描述以图形化的方式显示在屏 幕上并能够与用户进行交互的GUI元素。Container类 是用来组织界面上的组件或者单元。有两种常用的 Container(容器),一种是Window,Window对象表示 自由停靠的顶级窗口,另一个是Panel对象,可作为 容纳其他Component对象,但不能够独立存在,必须 被添加到其他Container中,比如说Window或者 Applet中。需要注意的是,Container是 ponent的子类,java.swing中的 JComponent类是java.awt中Container类的一个直接 子类,是java.awt中Component类的间接子类。Swing 中容器和组件的关系如图9.2所示。
1.JFrame Java中所提供的JFrame类的实例就是一个顶层容 器,是构造GUI的基础,其他的组件必须添加到顶层 容器中,以便和操作系统进行信息交互。JFrame的 常用方法见表9.1。
JAVA语言程序设计教程 第9章

在跨平台能力方面,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 并发编程与线程安全
Java语言程序设计第9章

在(x1,y1)与(x2,y2)两点之间绘制 一条线段
用指定的width和height绘制一个矩 形,该矩形的左上角坐标为(x,y) 用指定的width和height绘制一个实 心矩形,该矩形的左上角坐标为 (x,y)
}
HelloSwingApplet
import javax.swing.*;. import java.awt.*;
public class HelloSwingApplet extends JApplet { public void init() { JLabel label = new JLabel( "You are successfully running a Swing applet!"); label.setHorizontalAlignment(JLabel.CENTER); label.setBorder(BorderFactory.createMatteBorder( 1,1,2,2,Color.black)); getContentPane().add(label, BorderLayout.CENTER); } }
4
Applet应用程序接口(API)
ng.Object ponent java.awt.Container java.awt.Panel java.applet.Applet javax.swing.JApplet
5
方法 public void init()
9
图形环境和图形对象
坐标
– GUI组件的左上角坐标默认为(0,0) – 从左上角到右下角,水平坐标x和垂直坐标y增加。 – 坐标的单位是象素
Java语言程序设计(郑莉)第九章课后习题答案要点

Java语言程序设计第九章课后习题答案1.编写一个程序,该程序绘制一个5×9的网络,使用drawLine方法。
//NetWork类import java.awt.Graphics;import javax.swing.JFrame;public class NetWork extends JFrame{public NetWork(){// 设置窗体大小this.setSize(130, 130);//设置窗体大小不可改变this.setResizable(false);// 设置默认关闭方式,关闭窗体的同时结束程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 将窗体显示出来this.setVisible(true);}//横纵格之间都间隔10像素,起点在(20,40)public void paint(Graphics g){//绘制横向线for(int i=0;i<=5;i++){g.drawLine(20, 40+i*10, 110, 40+i*10);}//绘制纵向线for(int i=0;i<=9;i++){g.drawLine(20+i*10, 40, 20+i*10, 90);}}}//test9_1类public class test9_1 {public static void main(String[] args){new NetWork();}}运行结果:2.编写一个程序,该程序以不同的颜色随机产生三角形,每个三角形用不同的颜色进行填充。
//Triangle类import java.awt.Color;import java.awt.Graphics;import java.util.Random;import javax.swing.JFrame;public class Triangle extends JFrame{Random rnd = new Random();//这里定义4个三角形int[][] x=new int[4][3];int[][] y=new int[4][3];int[][] color=new int[4][3];public Triangle(){for(int i=0;i<4;i++){for(int j=0;j<3;j++){color[i][j]=rnd.nextInt(255);x[i][j]=rnd.nextInt(i*100+100);y[i][j]=rnd.nextInt(i*100+100)+50;//加50像素是为了避免顶到窗体上沿}}//窗体标题this.setTitle("随机三角形");//窗体大小this.setSize(500,500);//窗体大小不可变this.setResizable(false);//关闭窗体的同时结束程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//显示窗体this.setVisible(true);}public void paint(Graphics g){for(int i=0;i<4;i++){g.setColor(new Color(color[i][0],color[i][1],color[i][2]));g.fillPolygon(x[i], y[i], 3);}}}//test9_2public class test9_2 {public static void main(String[] args){new Triangle();}}运行结果:3.编写一个Applet,该程序请求用户输入圆的半径,然后显示该圆的直径、周长和面积。
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章

第9章常用组件GUI设计9.1 Swing概述9.2 事件响应原理9.3 JLable组件9.4 JButton组件与JToggleButton组件9.5 JCheckBox和JRadioButton组件9.6 JComboBox组件9.7 JList组件9.8 JTextField与JTextArea组件9.1 Swing 概述图9.1 图形用户界面中常用的组件9.1.1 JApplet由于所有的Swing GUI组件都应该包含在JApplet小程序中,且javax.Swing.JApplet是java.applet.Applet的子类,所以本章主要介绍javax.Swing的“J组件”,应用程序均以JApplet小程序为例。
JApplet的使用与Applet小程序相似,它们与HTML文件的配合没有什么差别,差别仅在默认布局策略与个别方法的使用上,这将在讲述到有关内容时加以讨论。
9.1.2 Swing中常用的包由于Swing功能相当强大且复杂,考虑到功能分解的原则,Java系统将Swing按不同功能分为表9.1所示的若干个包,它们分别针对于不同的组件及事件。
表9.1 Swing中常用的包包名说明javax.swing最常用的包,包含了各种Swing组件的类javax.swing.border包含与Swing组件外框有关的类javax.swing.colorchooser针对Swing调色版组件(JColorChooser)设计的类javax.swing.event处理由Swing组件产生的事件javax.swing.filechooser包含针对Swing文件选择对话框(JFileChooser)所设计的类javax.swing.plaf处理Swing组件外观的相关类表9.1 Swing中常用的包javax.swing.table针对Swing组件表格(JTable)所设计的类javax.swing.textjavax.swing.text.html包含与Swing文字组件相关的类javax.swing.text.html.parserjavax.swing.text.rtfjavax.swing.tree针对Swing树状元素(JTree)所设计的类javax.swing.undo提供Swing文字组件的Redo与Undo功能9.1.3 常用组件的继承关系由于本章所述组件所使用的成员方法主要是继承其直接父类或更高层父类的成员方法,为了正确地使用这些组件,有必要了解每个组件的继承关系。
Java程序设计实用教程_第9章_java applet程序

相应的HTML文件的内容为: <applet code= Example9_3.class width=200 height=200> <Param name="girl" value ="160"> <Param name="boy" value ="175"> </applet>
17
9.4 在Applet中使用图形、字体和颜色 9.4.1 使用图形:Graphics类 Graphics类中常用的两种属性:Color和Font Graphics类的常用方法
13
public void start() { sum=0; for(int i=1;i<=90;i++) sum=sum+i; } public void paint(Graphics g) { g.setColor(Color.blue); g.drawString("程序设计方法",20,60); g.setColor(Color.red); g.drawString("sum="+sum,20,90); } }
第9章 Applet程序
1
9.1 Applet简介
9.1.1 Applet说明 1. 查看方法: •支持Java的Web浏览器 •appletviewer 2. 显示Applet •Applet是一种特殊的Java程序,它不能独立运行。编 译器将Applet源程序编译成Java字节码(Byte-Code) 后,在网页中加载的是Java字节码。在网络上如果查 看包含Java字节码的网页,则Web服务器将编译好的 Java字节码送至客户端的浏览器中执行,
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),以像素点为单位,顺序向右和向下 延伸。图形的大小如超过窗口,则超出部分不会显示出来。 延伸。图形的大小如超过窗口,则超出部分不会显示出来。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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.1.2 线程的控制
5. 线程其他状态检测与切换 ng.Thread提供了用于线程控制的方 ng.Thread提供了用于线程控制的方 法,除上面介绍的之外,还有其他一些方法, 例如: public boolean isActive():用于检测线程是 isActive():用于检测线程是 否活动,当线程处于新建或消亡状态时返回 false,其他状态返回true. false,其他状态返回true. public void interrupt():设置线程的中断标 interrupt():设置线程的中断标 志,如果线程处于可运行状态,则只是简单 的设置中断标志,并不影响线程的运行;如 果该线程处于阻塞(休眠)状态,则将导致 sleep()方法抛出InterruptedException异常. sleep()方法抛出InterruptedException异常.
9.1.2 线程的控制
在可运行状态下,线程执行的核心代码就是 run()方法,或者是它直接或间接调用的方法. run()方法,或者是它直接或间接调用的方法. 在执行run()方法的过程中,线程既可能因调 在执行run()方法的过程中,线程既可能因调 用了sleep()方法而进入阻塞状态,也可能因 用了sleep()方法而进入阻塞状态,也可能因 等待I/O操作的完成而进入阻塞状态,还可 等待I/O操作的完成而进入阻塞状态,还可 能因调用了wait()方法以等待某一特殊情况 能因调用了wait()方法以等待某一特殊情况 出现而进入阻塞状态.一旦上述方法所要求 或等待的条件不再成立,则线程将重新进入 可运行状态,之后将被重新调度并继续执行 run()中的代码. run()中的代码.
9.1.2 线程的控制
6. 线程的同步 在编写多线程程序时,不可避免地会遇到多 个线程并发访问一个对象或者数据的情况, 此时就要十分小心的处理好线程之间的同步 问题.处理不好线程同步将可能导致线程读 到失效的数据,甚至引发死锁问题. 1)没有同步可能带来的问题 为了演示并发访问同一对象时没有进行同步 所带来的问题,请先看看下面的程序:
9.1.2 线程的控制
3. 可运行状态与阻塞状态的相互转化 一旦线程进入可运行状态,则线程将可以被 CPU调度执行.在系统中有一个负责线程调 CPU调度执行.在系统中有一个负责线程调 度与切换的调度器,它会在适当的时候选择 处于可运行状态线程到CPU上运行,至于怎 处于可运行状态线程到CPU上运行,至于怎 样调度以及选择哪个线程以供CPU执行,则 样调度以及选择哪个线程以供CPU执行,则 与操作系统和线程的优先级有关.在抢占式 操作系统中,当有优先级比当前正在执行的 线程优先级高的可运行线程出现时,将会调 度优先级高的线程到CPU上运行.然而,在 度优先级高的线程到CPU上运行.然而,在 非抢占式(或称分时)操作系统中,CPU的 非抢占式(或称分时)操作系统中,CPU的 执行时间被分成很小的时间片,分别分配给 各个线程执行.
9.1.1 线程的概念
3. 多线程编程
多线程编程是指将程序任务分成几个并行的子任 务,由这些子任务并发执行,一起协作完成程序 的功能.多线程的执行是并发的,即在逻辑上是 "同时"的,而不管是否是物理上的"同时". 如果系统只有一个CPU,那么真正的"同时"是不 如果系统只有一个CPU,那么真正的"同时"是不 可能的,而只能采用各线程轮流使用CPU的方法来 可能的,而只能采用各线程轮流使用CPU的方法来 模拟"同时执行"(只是由于CPU的速度非常快, 模拟"同时执行"(只是由于CPU的速度非常快, 用户感觉不到其中的区别);但是如果是在多CPU 用户感觉不到其中的区别);但是如果是在多CPU 系统中,则多线程的并行执行是可能的,可以把 不同的线程分配到不同CPU上同时执行. 不同的线程分配到不同CPU上同时执行.
9.1.2 线程的控制
【例程9-2】SynDemo.java 例程9 /*演示没有进行线程同步所带来的问题*/ /*演示没有进行线程同步所带来的问题* public class SynDemo{ public static void main(String[] args){ Demostrator shareDemostrator = new Demostrator(); Thread t1 = new Thread(shareDemostrator,"t1"); Thread t2 = new Thread(shareDemostrator,"t2"); t1.start(); t2.start(); } } class Demostrator implements Runnable{ private int shareData = 0; public void run(){
Java程序设计教程 Java程序设计教程
第9章 多线程与Applet 多线程与Applet
9.1 线程 HTML基础 9.2 HTML基础 9.3 Applet
9.1 线程
9.1.1 9.1.2 9.1.3 9.1.4 线程的概念 线程的控制 线程的创建 线程间通信
9.1.1 线程的概念
1. 程序的顺序执行与并发执行 程序的顺序执行是指一个具有独立功能的程 序独占处理机直至最终结束的过程.当程序 顺序执行时,在任意时刻程序中只有一个执 行点,它具有如下的特点: 顺序性:即程序执行过程可以看成是一系列 顺序性:即程序执行过程可以看成是一系列 严格按程序规定的状态转移的过程; 封闭性:也就是说程序执行的最终结果由给 封闭性:也就是说程序执行的最终结果由给 定的初始条件决定,不受外界因素的影响; 可再现性:只要输入的初始条件相同,则无 可再现性:只要输入的初始条件相同,则无 论何时重复执行该程序都会得到相同结果.
9.1.1 线程的概念
4. Java中线程的概念模型 Java中线程的概念模型 Java内在支持多线程,它的大部分类型都是 Java内在支持多线程,它的大部分类型都是 在多线程下定义的,从而使整个系统成为异 步系统.Java通过ng.Thread类封装了 步系统.Java通过ng.Thread类封装了 线程及其上的操作,每个线程由三部分组成: (1)虚拟的CPU,封装在ng.Thread )虚拟的CPU,封装在ng.Thread 类中. (2)CPU所执行的代码. CPU所执行的代码. (3)CPU所处理的数据. CPU所处理的数据.
9.1.2 线程的控制
线程的状态及其切换的示意图如图9 线程的状态及其切换的示意图如图9-2所示.
9.1.2 线程的控制
2. start()方法 start()方法 start()方法的作用是启动线程,使线程由新 start()方法的作用是启动线程,使线程由新 建状态进入可运行状态,准备被CPU调度执 建状态进入可运行状态,准备被CPU调度执 行.对于start()的调用是立即返回的,并不 行.对于start()的调用是立即返回的,并不 影响调用了start()方法的其他线程的执行. 影响调用了start()方法的其他线程的执行. 如果一个线程的start()方法没有被调用,则 如果一个线程的start()方法没有被调用,则 该线程是不可能运行的,而只能等待,因为 此时该线程没有分配到系统资源.
9.1.2 线程的控制
在Thread中定义的方法: Thread中定义的方法: public static void sleep(long milliseconds) throws InterruptedException //让线程休眠milliseconds微秒的时间 //让线程休眠milliseconds微秒的时间 public static void sleep(long milliseconds,int nanos) throws InterruptedException //让线程休眠milliseconds微秒加上nanos纳秒的时间 //让线程休眠milliseconds微秒加上nanos纳秒的时间 在Object中定义的方法: Object中定义的方法: public final void wait(long timeout) throws InterruptedException public final void wait(long timeout,int nanos) throws InterruptedException public final void wait() throws InterruptedException