JAVA面向对象程序设计实验指导书 public void init() { addMouseListener(this);
addMouseMotionListener(this); }
public void paint(Graphics g) { g.drawLine (x1, y1, x2, y2); }
public void mousePressed(MouseEvent e) { // 记录起点坐标 x1=e.getX(); y1=e.getY(); }
public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseReleased(MouseEvent e) {}
public void mouseDragged(MouseEvent e) { // 记录终点坐标 x2=e.getX(); y2=e.getY(); repaint(); }
public void mouseMoved(MouseEvent e) {} }
(3)编译LX4_3.java 文件。
(4)编写LX4_3.html 文件,源代码如下。
(5)在浏览器中打开LX4_3.html 文件,在窗口中拖动鼠标可以随意画出一条线如图4.4 所示。
图4.4
(四) 创建自定义接口
1.创建自定义接口的语法格式 如同使用包一样,程序员也可创建自定义接口。创建自定义接口要使用声明接口语句,格式如下:
- 17 -
JAVA面向对象程序设计实验指导书
[修饰符]
2.创建自定义接口程序文件LX4_4_JK.java。
(1)程序功能:在程序中声明一个自定义接口Nl,用来计算一个人年龄。
四、思考题
1. 包有什么作用?Java系统有哪些类型的包?如何在程序中使用Java 系统包中的类? 2. 如何创建包含四个自己创建的类的自定义包,如何使用这四个类。 3. 根据网上浏览的情况,说出Object 类的几个成员方法。 4. 接口有什么作用?如何实现系统接口。
5. 如何创建一个自定义接口?如何在一个类中实现这个接口? 6. 什么是异常?异常处理机制有什么作用?异常处理有哪些方式。
8. 说明使用变量之前是不是都要先声明变量。说明使用变量之前是不是都要先赋值,为什么。 9. 说明什么是构造方法。
10. 说明程序中有多个类时如何确定源程序文件的名称。
11. 说明类的继承和多态有什么作用,在使用上应该注意什么问题。
实验项目4 基础类和工具类的使用
一、 实验目的
了解Java 常用的系统类,包括字符串类、数学函数类、日期类、随机数类等的基本使用方法。理解Java 系统类的构成,掌握异常处理机制及异常处理方法。
二、 实验要求
1. 掌握字符串类的使用方法。 2. 掌握数学函数类的使用方法。 3. 掌握日期类的使用方法。
三、 实验内容
(一) 使用字符串与字符串类 java.lang 有两个字符串类String 和Str ingBuffer,封装了字符串的全部操作。其中String 用来处理创建以后不再改变的字符串,StringBuffer用来处理可变字符串。String 和StringBuffer 为最终类,不能派生子类,可以防止用户修改。String和StringBuffer 类在运行时要经历严格的边界条件检验,可以自动捕获异常,可以提高程序的健壮性。
1.创建使用String 和StringBuffer 类的程序 (1)程序功能:实现字符串的翻转。
(2)编写LX5_2.java 程序文件,源代码如下。 import java.applet.Applet; import java.awt.Graphics;
public class LX5_2 extends Applet {
public void paint(Graphics g) {
String str=\这是一个字符串??This is a test string\g.drawString(\正常字符串:\
g.drawString(\翻转字符串:\
}
public String reverse(String s) {
- 18 -
JAVA面向对象程序设计实验指导书 int len=s.length();
StringBuffer buffer=new StringBuffer(len); for (int i=len-1; i>=0; i--)
buffer.append(s.charAt(i)); return buffer.toString(); } }
2. 程序分析:
程序在paint 方法中首先定义一个String 类对象str, 将\将字符串常量赋给了str (实际的程序流程为Java 系统先为字符串常量创建一个无名字符串对象,然后再把字符串的引用赋给str)。然后使用Graphics 的对象g, 调用drawString 方法输出原始字符串,然后输出翻转后的字符串,对字符串的翻转操作使用自定义的reverse方法实现。在drawString 方法里有一个字符串表达式,将字符串常量和字符串变量进行了连接(+) 运算, 其结果仍为字符串对象,字符串连接是String 类的唯一运算操作。drawString(字符串对象,x坐标,y坐标)方法将字符串按定义的位置在Applet 中显示出来。
在r everse 方法中,创建了StringBuffer 对象buffer,在创建时指定其长度为字符串参数s 的长度。程序中使用了String 类的方法charAt(i) (可返回字符串的第i 个字符),使用了StringBuffer 类的方法append 连接字符串(可将参数值添加到字符串尾部)。在for 循环中,每次反向从字符串s 中取出一个字符添加到buffer 的尾部。循环完毕,buffer 中存放的就是翻转后的字符串。因为reverse 方法的返回值是String 类型,因此还调用了toString 方法将StringBuffer 类型转换成String 类型再返回。
(二) 使用日期类
Java 提供了3 个日期类:Date、Calendar 和D ateFormat。其中,Date 类主要用于创建日期对象并获取日期,Calendar类可获取和设置日期,DateFormat类用来设置日期的格式。 Java 语言规定的基准日期为1970.1.1 00 :00:00 格林威治(GMT)标准时间,当前日期是由基准日期开始所经历的毫秒数转换出来的。
1. 使用日期类的Applate 应用程序
(1)程序功能:说明3 个日期类Date、Calendar和DateFormat 的使用方式及显示的样式。 (2)编写LX5_9.java 程序文件,源代码如下。 import java.text.*; import java.util.*; import java.awt.*; import java.applet.*;
public class LX5_9 extends Applet {
public void paint(Graphics g) { Date today; Calendar now; DateFormat f1,f2; String s1,s2;
today=new Date(); // 获取系统当前日期
g.drawString(\字符串格式:\f1=DateFormat.getInstance(); // 以默认格式生成格式化器 s1=f1.format(today); // 将日期转换为字符串
g.drawString(\系统格式:\生成长格式的中国日期格式化器 f1=DateFormat.getDateInstance(DateFormat.LONG, Locale.CHINA); f2=DateFormat.getTimeInstance(DateFormat.LONG, Locale.CHINA); s1=f1.format(today); // 将日期转换为日期字符串 s2=f2.format(today); // 将日期转换为时间字符串 g.drawString(\中国格式:\now=Calendar.getInstance(); // 获取系统时间
s1=now.get(now.HOUR)+\时\分\秒\g.drawString(\调整前时间:\now.set(2004,8,15,9,9,9); today=now.getTime();
- 19 -
JAVA面向对象程序设计实验指导书
g.drawString(\调整后时间:\} }
(3)编译程序文件。
(4)在浏览器中打开包含应用程序的页面文件,显示结果如图5.11 所示。
图5.11
2. 在独立运行的应用程序中使用日期函数。
(1)程序功能:补充说明3 个日期类D ate、Calendar 和DateFormat 的使用方式及显示的样式。
3.编程计算任意两个日期的间隔 //DateInterval.java import java.util.Date; public class N6Code {
public static void compare(Date date1, Date date2) { long diffMillis = date1.getTime() - date2.getTime(); long diffSecs = diffMillis / (1000); // Get difference in minutes
long diffMins = diffMillis / (60 * 1000); // Get difference in hours
long diffHours = diffMillis / (60 * 60 * 1000); // Get difference in days
long diffDays = diffMillis / (24 * 60 * 60 * 1000); } }
4.实现冒泡排序,掌握一些集合类的使用 //MySort.java
import java.util.Random; public class MySort {
private static void bubbleSort(int[] Array) { int temp;
for (int i = 0; i < Array.length; i++) {
for (int j = 0; j < (Array.length - i - 1); j++) { if (Array[j] > Array[j + 1]) { temp = Array[j];
Array[j] = Array[j + 1]; Array[j + 1] = temp;
- 20 -
JAVA面向对象程序设计实验指导书 } } } }
public static void main(String[] args) { int[] array = new int[100]; Random random = new Random();
for (int i = 0; i < array.length; i++) { array[i] = random.nextInt(100); }
bubbleSort(array);
for (int i = 0; i < array.length; i++) { System.out.print(array[i]); System.out.print(' '); } } }
实验项目5 图形用户界面:布局管理器的使用
一、 实验目的
了解图形用户界面基本组件窗口、按钮、文本框、选择框、滚动条等的使用方法,了解如何使用布局管理器对组件进行管理,以及如何使用Java 的事件处理机制。
二、 实验要求
1. 掌握在Applet 容器中添加组件的方法,掌握使用布局管理器对组件进行管理的方法。 2. 理解Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法。 3. 掌握编写独立运行的窗口界面的方法。 4. 了解Java Swing 组件的使用方法。 5. 了解对话框的使用方法。
三、 实验内容
(一) 创建图形用户界面
图形用户界面(Graphic User Inte rface ,简称GUI)是为方便用户使用设计的窗口界面,在图形用户界面中用户可以看到什么就操作什么,取代了在字符方式下知道是什么后才能操作什么的方式。组件(Component) 是构成GUI 的基本要素,通过对不同事件的响应来完成和用户的交互或组件之间的交互。组件一般作为一个对象放置在容器(Container)内,容器是能容纳和排列组件的对象,如Appl et、Panel(面板)、Frame(窗口)等。通过容器的add 方法把组件加入到容器中。
1. 在Applet 中添加标签、按钮并使用网格布局
(1)程序功能:在Applet 容器中添加组件标签、按钮,并使用网格布局管理器排列组件在容器中的位置。
(2)编写LX6_1.java 程序文件,源代码如下。 import java.awt.*;
import java.applet.Applet;
public class LX6_1 extends Applet {
Label l1;
Button b1, b2, b3, b4, b5, b6; public void init() {
- 21 -