JAVA讲义第8章
- 格式:doc
- 大小:503.50 KB
- 文档页数:45
第八章输入输出流【课前思考】1.字节流和字符流的基类各是什么?2.什么是对象的串行化?对象串行化的作用是什么?【学习目标】本讲主要讲述了java语言中的输入/输出的处理,通过本讲的学习,同学们可以编写更为完善的java 程序。
【学习指南】仔细阅读本章各知识点的内容, 深刻理解 java 语言中输入/输出流的处理方法,掌握处理问题的方法,多练习,多上机。
【难重点】●遇到实际问题时,要根据需要正确使用各种输入/输出流,特别是对中文使用适当的字符输入流。
●正确使用对象串行化的方法。
●处理字符流时,其构造方法的参数是一个字节流。
●对象串行化的概念。
【知识点】●I/O 流概述●文件处理●过滤流●字符流的处理●对象的串行化●其它常用的流【内容】第一节数据流的基本概念理解数据流流一般分为输入流(Input Stream)和输出流(Output Stream)两类,但这种划分并不是绝对的。
比如一个文件,当向其中写数据时,它就是一个输出流;当从其中读取数据时,它就是一个输入流。
当然,键盘只是一个数人流,而屏幕则只是一个输出流。
Java的标准数据流标准输入输出指在字符方式下(如DOS),程序与系统进行交互的方式,分为三种:标准输入studin,对象是键盘。
标准输出stdout,对象是屏幕。
标准错误输出stderr,对象也是屏幕。
例 8.1 从键盘输入字符。
本例用System.in.read(buffer)从键盘输入一行字符,存储在缓冲区buffer中,count保存实际读入的字节个数,再以整数和字符两种方式输出buffer中的值。
Read方法在java.io包中,而且要抛出IOException异常。
程序如下:import java.io.*;public class Input1{public static void main(String args[]) throws IOException{System.out.println("Input: ");byte buffer[] = new byte[512]; //输入缓冲区int count = System.in.read(buffer); //读取标准输入流System.out.println("Output: ");for (int i=0;i<count;i++) //输出buffer元素值{System.out.print(" "+buffer[i]);}System.out.println();for (int i=0;i<count;i++) //按字符方式输出buffer{System.out.print((char) buffer[i]);}System.out.println("count = "+ count); //buffer实际长度}}程序中,main方法采用throws子句抛出IOException异常交由系统处理。
《使用Java语言理解程序逻辑》理论课教案第8章字符串一、任务、目标部分[10分钟] (2)二、整章授课思路[80分钟] (2)1、字符串[25分钟] (2)1)如何使用字符串 (3)2)字符串的长度 (3)3)字符串的比较 (3)2、字符串常用的方法[20分钟] (3)3、方法的参数[25分钟] (3)1)如何使用带参数的方法: (3)2)带参数方法的应用: (4)4、StringBuffer 类[10分钟] (4)三、总结[10分钟] (4)四、作业 (4)课时:2学时授课人:庞俏⏹本章任务比较天地会的标语实现自动猜数字的赌博机⏹本章目标会使用字符串的常用方法掌握带参数的方法会使用StringBuffer对字符串进行操作⏹本章重点会使用字符串的常用方法掌握带参数的方法使用StringBuffer类的方法对字符串进行操作⏹本章难点掌握带参数的方法一、任务、目标部分 [10分钟]根据PPT提供的问题,逐一提问学员。
二、整章授课思路[80分钟]本章节主要分为4个部分:1)字符串:从如何使用字符串开始,讲解怎样字符串的长度,字符串的比较,字符串的连接,字符串常用的提取和查询方法。
2)字符串常用的方法:讲解常用的方法。
3)带参数的方法:可以采用3W1H的教学方法进行讲解;Why:为何需要使用带参数的方法;How:怎么使用带参数的方法;What:带参数的方法的应用Where:在什么情况下我们要考虑使用带参数的方法4)StringBuffer类:首先讲解StringBuffer的定义,并比较和String的不同之处;1、字符串[25分钟]讲解要点字符串在生活中和项目中是非常常见的,举例说明。
1)如何使用字符串讲解要点定义并初始化字符串;使用字符串,对字符串进行一些处理;2)字符串的长度讲解length()方法的调用,并演示示例说明length()方法的实现。
3)字符串的比较举例说明在生活中我们经常需要比较字符串,在这里提出问题,生活中无论是登陆QQ,还是查询成绩等都需要用到比较。
第8章图形用户界面设计8.1概述第5章和第7章的例子中曾涉及到过一些简单的图形用户界面内容。
通过图形用户界面(graphics user interface ,GUI),用户和程序之间可以方便地进行交互。
在Java语言中提供了专门的类库来生成各种标准图形界面元素和各种处理图形界面的各种事件,以实现图形用户界面的设计。
8.1.1 AWT简介【引例】AWT实例。
import java.awt.*;import java.applet.*;public class Applet2 extends Applet{public void init(){repaint();}public void paint(Graphics g){g.drawString("My applet", 10, 15);g.draw3DRect(0, 0, 100, 20, true); //绘制三维立体矩形}}该引例实现了一种特殊效果的输出,即在屏幕上用一个三维立体矩形的方框将字符串包围起来。
程序中使用的java.awt包就是Java中专门用来生成图形用户界面的类库。
Java的抽象窗口工具包AWT(Abstract Window Toolkit)中包含了许多类来支持GUI 设计。
AWT由Java的java.awt提供,该包中有许多用来设计GUI的组件类,如:按钮、菜单、列表、文本框等组件类,同时它还包括窗口、面板等容器。
AWT包中层次关系如图8.1所示。
图8.1 AWT包层次关系图从图中不难看出,java.awt包中除了包含Font、Color、Graphics、MenuComponent等子类外,还包含了两个重要的概念:组件类(Component)和容器类(Container)。
Component类中包含了Button(按钮)、Canvas(画布)、CheckBox(复选按钮)、Choice(下拉列表)、Label(标签)、List(列表)、Scrollbar(滚动条)、TextField(文本框)、TextArea(多行文本域)子类。
Java把由Component类的子类或间接子类创建的对象称为一个组件。
Container类包含了Panel(面板)、Window(窗口)、Frame(结构)、Dialog(对话)等子类。
Java把由Container的子类或间接子类创建的对象称为一个容器。
Java的Component类提供了一个public add()方法,可以向容器添加组件。
即,一个容器可以调用这个方法将组件添加到该容器中。
需要注意:Applet类不是java.awt包中的类,图中只是说明它是Panel的子类,是Container的间接子类,即由Applet类创建的对象也是一个容器。
8.1.2 基本的构造方法Java 应用程序和Java Applet程序都可以在图形用户界面中工作,但它们的实现方法不同。
Java Applet程序需要在Web浏览器中运行,而浏览器本身是图形界面的环境,所以Java Applet程序可以且只能在图形界面下工作,所有Applet程序都需要加入import java.awt.*的描述。
与Java Appet程序不同,Java 应用程序没有浏览器提供的现成的图形界面可以直接使用,所以需要创建自己的图形界面,才能实现图形界面下的输入输出功能。
现在来看一看引例中的paint()方法以及相关的其他两种方法。
1.paint()方法该方法的主要作用是在屏幕上显示文字、图形和其他界面元素。
它也是浏览器可自动调用的方法。
导致浏览器调用paint()方法的事件主要有如下3种:(1)Applet程序被启动之后,自动调用paint()来重新描绘自己的界面。
(2)Applet程序所在的浏览器窗口改变时,例如,窗口放大、缩小、移动或被系统的其他部分遮挡、覆盖后又重新显示在屏幕的最前方等。
这些情况都要求Applet程序重画它的界面,此时浏览器就自动调用paint()方法来完成此项工作。
(3)Applet程序的其他相关方法被调用时,系统也会相应地调用paint()方法。
2.repaint()方法该方法在Applet程序需要重绘时随时可以调用。
3.update()方法该方法由repaint()调用,表明应该更新输出画面。
当repaint()方法被调用时,系统将首先调用update()方法将Applet程序实例所占用的屏幕空间清空,然后调用paint()方法重画之。
【例8.1】用基本构造方法实现动画效果。
import java.applet.Applet;import java.awt.*;public class Animator extends Applet{image[] mygif; //保存图片序列的Image数组int total=9; //图片序列中的图片总数int current=0;public void init(){mygif=new Image[total];for(int i=0;i<total;i++)mygif[i]=getImage(getDocumentBase(),"gif\\gif000"+(i+1)+".gif");}public void start(){current=0; //从第一幅开始显示}public void paint(Graphics g){g.drawImage(mygif[current],50,50,this); //显示当前序号图片current=++current%total; //计算下一个显示图片序号try{Thread.sleep(100); //程序休眠100毫秒}catch(InterruptedException e){showStatus(e.toString());}repaint();//图片停留100毫秒后被擦除,重新调用paint()显示下一张图片}}从第5章已经知道,Applet程序必须被嵌入到HTML代码中方可实现其功能。
由于本章的重点是图形用户界面设计,所以,凡是需要HTML代码的地方,本章均省略,读者可自行写出简单的HTML代码文件,运行Applet程序即可。
本例程序运行后,瞬间结果如图8.2所示。
图8.2 例8.1的瞬间结果屏幕用Java实现动画的原理与放映动画片类似,取若干相关的图像或图片,顺序、连续地在屏幕上先显示,后擦除,循环往复就可以获得动画的效果。
在本程序中,使用Applet 类中的getImage()方法获取所有的.gif图像文件存放于mygif数组中;使用paint()方法一次显示一幅图像,显示图像使用Graphics类的drawImage()方法;每幅图像停留100毫秒后,使用repaint()方法擦除图片,重新调用paint()方法显示下一幅图片。
8.2组件的创建与使用通过下面的引例不妨认识一下AWT组件的创建和使用方法。
注意,有些组件在第5、7章出现过,并详细介绍过。
【引例】简单组件的使用方法。
import java.applet.*;import java.awt.*;import java.awt.event.*;public class example extends Applet implements ActionListener{Font MyFont= new Font("隶书",Font.BOLD,12);TextField text1=new TextField(18); //创建文本框Button button1=new Button("Click me"); //创建按钮Button button2=new Button("Click here"); //创建按钮public void init(){add(text1); //加文本框到窗口text1.setFont(MyFont);add(button1); //加按钮1到窗口add(button2); //加按钮2到窗口button1.addActionListener(this); //将按钮1注册给按下按钮事件的监听者button2.addActionListener(this); //将按钮2注册给按下按钮事件的监听者}public void actionPerformed(ActionEvent e) //按钮被按下后的执行方法{String b1=new String("欢迎到Java园地!");String b2=new String("这是一个精彩的世界!");if(e.getSource()==button1)text1.setText(b1); //如果单击按钮1,则将b1串设置到文本框中if(e.getSource()==button2)text1.setText(b2); //如果单击按钮2,则将b2串设置到文本框中}}程序的功能:程序中有一个文本框组件和两个按钮组件,当单击“Click me”按钮后,在文本框中显示“欢迎到Java园地!”;当单击“Click here”按钮后,在文本框中显示“这是一个精彩的世界!”。
8.2.1 简单的窗口部件在Java语言中,GUI标准组件是由AWT包中的对象来代表的,这些对象间的层次关系如图8.1所示。
可见所有的GUI标准组件都是java.awt.*包中的根类Component类的子类,Component类的直接子类包括一个容器组件Container和8个基本组件,如Button、Label、Choice、TextComponent等。
Container是所有容器组件的根类,容器组件的主要作用是包容其他组件并按一定的方式组织排列它们,同一个容器中的所有部件通常总是同时被显示和同时被隐藏的。
所有的容器组件都是Container类的子类,可分为3组。
第1组为Panel和Applet容器,它们都是无边框的;第2组为ScrollPane容器,它是可以自动处理滚动操作的容器;第3组为Window、Frame、Dialog和FileDialog容器,它们是都含有边框,并可以进行移动、放大、缩小、关闭等操作,且具有较强功能的容器。
基本控制组件被安放在容器中的某个位置,它的作用是用来完成一种具体地与用户交互的功能。
包括接收用户的一个命令,接收用户的一个文本或选择输入,向用户显示一段文本或一个图形等等。
目前常用的控制组件有命令按钮、单选按钮、复选按钮、下拉列表、文本框等,引例中就使用了按钮和文本框组件。