2.掌握Applet的生命周期与绘图周期。 3.了解Applet与浏览器的通信。 4.掌握在Applet图形界面设计。 三、实训内容 参考教材内容编写、运行下列程序,并得到正确的结果。
1.编写Applet,从HTML文件中获取两个字符串参数,并将它们在浏览器中显示出来。 2.编写Applet,显示http://www.lzptc.edu.cn的页面内容。
3.编写Applet,包含一个文本框和一个按钮,单击按钮时,在浏览器的状态行显示文本框中的内容。
4编写Applet,显示不同大小不同风格,类型的字体
5.编写Applet,绘制直线,各种矩形,多边形,圆和椭圆等图形。 6.编写Applet,显示一排用随机定义的颜色所填充的小方块。
7.编写Applet,在浏览器中显示图片文件,包括原图,缩小一半图,宽扁图和瘦高图。 8.编写Applet播放两段音乐,一段是连续播放的背景音乐,一段是独立的整段音乐。
实训十一 GUI标准组件及事件处理
一、实训目的
1.掌握图形用户界面基本组件窗口、按钮、文本框、选择框、滚动条等的使用方法。 2.了解如何使用布局管理器对组件进行管理,以及如何使用Java 的事件处理机制。 二、实训要求
1.掌握在Applet 容器中添加组件的方法,掌握使用布局管理器对组件进行管理的方法。 2.理解Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法。 3.掌握编写独立运行的窗口界面的方法。 4.了解对话框的使用方法。 三、实训内容
图形用户界面(Graphic User Interface ,简称GUI)是为方便用户使用设计的窗口界面,在图形用户界面中用户可以看到什么就操作什么,取代了在字符方式下知道是什么后才能操作什么的方式。
组件(Component)是构成GUI 的基本要素,通过对不同事件的响应来完成和用户的交互或组件之间的交互。组件一般作为一个对象放置在容器(Container)内,容器是能容纳和排列组件的对象,如Applet、Panel(面板)、Frame(窗口)等。通过容器的add 方法把组件加入到容器中。
1.编写一个图形界面的Java Application,为用户提供三种关闭窗口的方法:使用按扭,使用菜单项,使用窗口关闭图标。
2.编写实现一个模拟手机的图形用户界面,包括一个显示区和一个键盘区,显示区用来显示数字和信息,键盘区包括0~9 10个数字键和“发送”、“清零”、“关机”三个命令键。考虑使用什么样的图形界用户界面布局策略。
3为上题所编写的界面增加事件响应功能:当用户按数字键时,相应的数字回显在显示区上;当用户按“清零”键时,显示区的数字清空;当用户按“发送”键时,显示区中出现当前的号码和“拨号中......”的信息;当用户按关机键时结束程序。
4.编程实现一个学生信息管理系统的图形界面。需要录入的信息包括学生学号、姓名、性别、出生年、月、日、年级以及是否联合培养。根据这些信息的性质选择使用不同图形组件来设计界面。
5.为上题任务所编写的界面增加事件响应功能。当用户选定了某一个出生月份,例如3
月份时,系统自动把日期的选择范围限制到1~31之间;当用户单击“录入”按扭时,系统把所有的学生信息打印在屏幕上。
实训十二 多线程机制
一、实训目的
1.线程的概念,线程的生命周期。
2.多线程的编程:继承Thread类与使用Runnable接口。 3.使用多线程机制实现动画。 二、实训要求
1.理解用创建Thread子类的方法实现多线程。 2.理解用实现Runnable接口的方法实现多线程。 3.利用多线程编程实现一个正在旋转的地球。 三、实训内容
程序(program)是对数据描述与操作的代码的集合,是应用程序执行的脚本。进程(process)是程序的一次执行过程,是操作系统运行程序的基本单位。程序是静态的,进程是动态的。系统运行一个程序就是一个进程从创建、运行到消亡的过程。线程是比进程更小的运行单位,是程序中单个顺序的流控制。一个进程中可以包含多个线程。线程是一种特殊的多任务方式。当一个程序执行多线程时,可以运行两个或更多的由同一个程序启动的任务。这样,一个程序可以使得多个活动任务同时发生。
1.使用线程创建动画的程序(如下图) (1)程序功能:创建一个显示小球不断跳动并显示不同状态的动画程序。要达到无闪烁现象,显示速度快,占用内存较小的要求。即要使用双缓冲技术创建图像的显示方式,清除闪烁现象。使用线程分别解决准备图像、显示图像的任务,解决显示速度慢,占用内存较大的问题。
程序说明:
程序中使用图形双缓冲技术,显示一组图像。程序实现Runnable 接口中的run 方法,这是一个和Applet 同时运行的线程。对线程的控制由Applet 的start 和stop 方法完成,Applet 运行时,就在start 方法中启动线程,Applet 停止时,就在stop 方法中停止线程。
在线程td 的run 方法中的永恒循环当中,实现图像的轮流显示使小球不停的跳动。首先调用绘图对象g1 的drawImage 方法把当前图像画在屏幕缓冲区内,在paint 方法中把屏幕缓冲区拷贝到屏幕上。但paint 方法无法直接调用,因为要传递给它一个图形参数g,故调用repaint 方法间接调用paint方法。repaint 方法无参数,它将调用update 方法,由update 方法调用paint 方法并传递g 参数。这就是曾介绍过的一个线程负责准备图像而另一个线程负责显示图像的动画方法。
(2)准备10 个图像文件(T1.JPG~T10.JPG),它们分别显示小球不同时间的高度和状态,存放在“程序/image”目录下。这是创建动画的基础工作,是动画显示的内容,应用程序只是解决图像“动”即显示的方式。
(3)编写该程序文件,源代码如下。 import java.awt.*; import java.applet.*;
public class LX13_1 extends Applet implements Runnable {
Image img[]=new Image[10]; Image buffer; Graphics g1; Thread td; int index=0;
public void init() {
buffer=createImage(getWidth(),getHeight());//创建图像缓冲区 g1=buffer.getGraphics();//创建绘图区 for (int i=0;i<10;i++)
img[i]=getImage(getCodeBase(),\}
public void start() {
if (td==null) {
td=new Thread(this);//创建线程对象 td.start(); } }
public void stop() {
if (td!=null)
td=null;
}
public void run() {
while(true) {
g1.drawImage(img[index],10,20,this);//画图像到缓冲区 repaint();//画出图像 try {
td.sleep(50);
} catch (InterruptedException e) {}
g1.clearRect(10,20,100,100);//清除缓冲区中的图像 index=++index; } }
public void paint(Graphics g) {
g.drawImage(buffer,0,0,this);//画出缓冲区中图像 }
public void update(Graphics g) {
paint(g);
}
}
(4)编写显示LX13_1.class 的页面文件,在浏览器中显示结果。 2.运行下面的程序,理解用创建Thread子类的方法实现多线程。 class SimpleThread extends Thread {
public SimpleThread(String str) {
super(str); }
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(i + \try {
sleep((int)(Math.random() * 1000)); } catch (InterruptedException e) {} }
System.out.println(\} }
public class TwoThreadsTest {
public static void main (String[] args) {
new SimpleThread(\new SimpleThread(\} }
3.运行下面的程序,理解用实现Runnable接口的方法实现多线程。 //这是一个时钟Applet,它显示当前时间并逐秒进行更新。 import java.awt.*; import java.applet.*; import java.util.*;
public class Clock extends Applet implements Runnable{
Thread clockThread; public void start(){
if(clockThread==null){
clockThread=new Thread(this,\clockThread.start(); } }
public void run(){
while(clockThread !=null){ repaint();
try{
clockThread.sleep(1000); }catch(InterruptedException e){} } }
public void paint(Graphics g){
Date now=new Date();
g.drawString(now.getHours()+\}
public void stop(){
clockThread.stop(); clockThread=null; }
}
4.自主设计题
设计一个交通信号灯类:
(1)变量:位置、颜色(红、黄、绿)、显示时间。
(2)方法:切换信号灯。创建并启动两个线程(东西向、南北向)同时运行。 3.实验要求
(1)根据需要设计多个线程。 (2)设计路口信号灯示意图界面。
(3)可将信号灯按方向分为3 种车道灯:左转、直行和右转。 (4)根据车流量进行时间的模糊控制。
实训十三 流式输入输出
一、实训目的
1.了解流式输入输出的基本原理。
2.掌握类File,FileInputStream,FileOutputStream,RandomAccessFile的使用方法。 二、实训要求
1.学习文件和目录的简单操作。
2.创建一个顺序文件,向其中写入部分用户键盘输入的字符,并回显在屏幕上。 3.学习随机文件的读写。 三、实训内容
1.运行下面的程序,学习文件和目录的简单操作。 //运行前先在当前目录中建立一个目录,目录名为test,向其中随意放入几个文件。import java.io.*;
public class FileOperation{
public static void main(String args[]){
try{
BufferedReader din = new BufferedReader(new InputStreamReader(System.in));
String sdir = \String sfile;
File Fdir1=new File(sdir);
if (Fdir1.exists()&&Fdir1.isDirectory()){
System.out.println(\for( int i=0; i< Fdir1.list().length; i++) //列出目录下内容
System.out.println( (Fdir1.list())[i]); File Fdir2=new File(\if(!Fdir2.exists()) Fdir2.mkdir();