java 实验.docx
- 文档编号:4642459
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:31
- 大小:304.95KB
java 实验.docx
《java 实验.docx》由会员分享,可在线阅读,更多相关《java 实验.docx(31页珍藏版)》请在冰豆网上搜索。
java实验
实验1包的使用与访问控制
实验目的:
(1)理解java包的组织结构;
(2)学会编写带有包结构的程序;
(3)掌握包结构下的成员访问控制
实验任务:
编写3个类,类名分别是Clock、A、B,其中类Clock和类A放在同一个包packone中,而类B则放在另一个包packtwo中,包packone和包packtwo放在同一个目录下。
类Clock中还有3个整型数据hour、minute、second,它们分别是public、private、protected,类Clock还包含一些方法使用这些数据。
类A和类B的功能相似,都是使用类Clock并调用类Clock中的方法。
请按下面的方法完成实验,并回答问题。
(1)新建JavaProject,命名为Shiyan7_1,在src目录下新建Package,命名为packone,并在packone包下新建Class,命名为Clock,Clock.java.程序代码如下:
//Clock.java
packagepackone;
publicclassClock{
publicinthour;
privateintminute;
protectedintsecond;
publicClock(inti,intj,intk){
setAll(i,j,k);
}
voidsetAll(inti,intj,intk){
hour=i;
minute=j;
second=k;
}
publicintgetHour(){
returnhour;
}
publicintgetMinute(){
returnminute;
}
publicintgetSecond(){
returnsecond;
}
}
(2)在packone包下新建Class,命名为A。
A.java代码如下:
//A.java
packagepackone;
classA{
publicstaticvoidmain(String[]args){
Clockc=newClock(5,20,10);
System.out.println("从类A中访问Clockhour="+c.getHour());
System.out.println("从类A中访问Clockminute="+c.getMinute());
System.out.println("从类A中访问Clocksecond="+c.getSecond());
}
}
(3)现在在src目录下新建Package,命名为packtwo,然后在该包下新建Class,命名为B,B.java代码如下:
//B.java
packagepacktwo;
importpackone.*;
classB{
publicstaticvoidmain(String[]args){
Clockc=newClock(8,30,5);
System.out.println("从类B中访问Clockhour="+c.getHour());
System.out.println("从类B中访问Clockminute="+c.getMinute());
System.out.println("从类B中访问Clocksecond="+c.getSecond());
}
}
所建的程序目录情况如下:
分别运行A.java和B.java程序,结果如下:
思考题:
(1)现在将Clock类中的构造函数publicClock(inti,intj,intk)改成Clock(inti,intj,intk)运行A.java和B.java查看结果。
每次运行时都会弹出如下对话框:
运行A.java时:
运行B.java时,出现以下错误,表明不能访问:
从运行结果可看出,在同一个包中的成员可直接访问另一个包中的非public成员,而另一个包中的成员则不能访问其它包中的非public成员,修改回则可正确运行。
(2)用import语句可以导入所需的类,如果不用import语句,那么在使用包中的类时就必须带上完整的路径。
将B.java修改如下;
packagepacktwo;
classB{
publicstaticvoidmain(String[]args){
packone.Clockc=newpackone.Clock(8,30,5);
System.out.println("从类B中访问Clockhour="+c.getHour());
System.out.println("从类B中访问Clockminute="+c.getMinute());
System.out.println("从类B中访问Clocksecond="+c.getSecond());
}
}
运行结果如图:
可见,importpackone.*;导入了packone包,可直接使用packone包中的成员而不需要加完整路径,书写简洁方便不易出错;packone.Clockc=newpackone.Clock(8,30,5);语句冗长易出错。
第九章实验1Applet生命周期
实验目的:
(1)掌握JavaApplet程序的基本结构和编写方法;
(2)了解Applet的生命周期和运行过程。
实验任务:
编写Applet程序实现init()、start()、stop()、的story()方法,并观察其运行过程。
实验步骤:
(1)启动eclipse,新建java项目为AppletLifeCycle。
(2)在项目中新建包Applet接着新建一个名为AppletLifeCycle的类。
(3)在JBuilder2005生成的AppletLifeCycle.java中按程序清单9-1编辑的Java源代码。
程序清单9-1
//AppletLifeCycle.java
importjava.awt.*;
importjava.applet.*;
publicclassAppletLifeCycleextendsApplet{
//InitializetheApplet
publicvoidinit(){
System.out.println("Nowinit()isworking.");
}
//StarttheApplet
publicvoidstart(){
System.out.println("Nowstart()isworking.");
}
//stoptheApplet
publicvoidstop(){
System.out.println("Nowstop()isworking.");
}
//DestorytheApplet
publicvoiddestory(){
System.out.println("Nowdestory()isworking.");
}
publicvoidpaint(Graphicsg){
System.out.println("Theapplerunspaint().");
g.setColor(Color.red);
g.drawString("ThisisanApplet!
",150,100);
}
}
运行Applet所需的相应的文档可使用JBuilder2005在创建AppletLifeCycle时默认生成的AppletLifeCycle.html文件。
文件代码见程序清单9-2
程序清单9-2
//
HTMLTestPage
AppletLifeCyclewillappearbelowinaJavaenabledbrowser.
(4)运行所有文件,编译AppletLifeCycle.java文件,然后选择菜单栏中Run|RunPoject或是直接使用快捷键F9,运行该Applet程序。
得到结果:
(4)双击项目窗口中的AppletLifeCycle.html,在工作界面的内容窗口查看在浏览器的运行结果下图9-2所示,同时可以选择菜单栏中Run|RunAppletLifeCycle.htmlusingAppletLifeCycle,在Applet阅读器中观察输出结果如图9-3所示。
思考:
(1)运行AppletLifeCycle是,观察JBuilder2005主界面下方的消息输出窗口的输出内容。
(2)将图9-3窗口最小化,然后还原,观察JBuilder主工作界面下消息输出窗口的输出内容。
分析为什么不同动作会有不同的语句输出。
刚开始:
最小化:
还原:
因为Applet小程序运行是有生命周期的,调用显示时是暂时性的,再次显示时必须在此调用。
(3)请单击图9-1中的Stop按钮,观察JBuilder主界面下的结果显示的输出区内容;再单击Start按钮,观察JBuilder主界面下的结果显示的输出区内容;再单击Exit按钮,观察JBuilder主界面下的结果显示的输出区内容;分析为什么单击相应的按钮会有不同的语句在控制台输出。
因为没有JBuilder,没有实行,我的猜想应该是它每次单击某个按钮时,会相应的调用某个函数,输出会显示出对某个函数的调用。
疑问:
这里不知道什么不对,我用浏览器无法显示那个Applet的小程序,请叫老师怎么解决!
鼠标响应监测
实验目的:
(1)进一步熟悉JavaApplet程序的编写方法;
(2)了解如何进行鼠标事件监听
实验任务:
在Applet窗口监测鼠标事件,获取鼠标单击的坐标位置,将该点的x坐标和y坐标信息在Applet显示窗口输出,并以该点为矩形的左上角坐标位置绘制实心矩形,矩形长、宽均为50像素。
实验步骤:
(1)新建一个工程,名称为MousePressEvent,在该工程中创建一个Applet文件,包括MousePressEvent.java和MousePressEvent.html。
(2)编辑MousePressEvent.java文件的源代码。
代码如下:
//MousePressEvent.java
importjava.awt.*;
importjava.awt.event.*;
importjava.applet.*;
publicclassMousePressEvent
extendsApplet{
intx=0;
inty=0;
intwidth,height;
//ConstructtheApplet
publicMousePressEvent(){
}
//InstializetheApplet
publicvoidinit(){
addMouseListener(newMousePress());
}
classMousePressextendsMouseAdapter{
publicvoidmousePressed(MouseEventm){
x=m.getX();
y=m.getY();
width=50;
height=50;
repaint();
}
}
publicvoidpaint(Graphicsg){
System.out.println("Position_x="+x+""+"Position_y="+y);
g.setColor(Color.red);
g.drawRect(x,y,width,height);
}
}
编辑MousePressEvent.html文件的源代码,代码如下:
----MousePressEvent.html---->
HTMLTestPage
MousePressEventwillappearbelowinaJavaenabledbrowser.
实验结果:
实验新建项目结构如下
运行结果如下
在浏览器中运行的结果
思考题:
1、在新建MousePressEvent.java和MousePressEvent.html文件时,要注意MousePressEvent.html的命名要包含.html,否则将运行出错。
2、将Applet小应用查看器拉大或缩小时,控制台中的x及y坐标都会改变,因为每次对小应用查看器的改变都调用了
paint(Graphicsg)
{System.out.println("Position_x="+x+""+"Position_y="+y);
方法,都会重新计算并输出x及y的坐标,此时鼠标并没有点击窗口,所以x及y的坐标仍然是0。
运行结果如下
11.2实验一按钮的有序排列
实验目的:
(1)了解GUI的概念;
(2)了解java.awt包和javax.swing包,以及比较它们具有的同性质的组件的异同;
(3)掌握和运用Java的基本GUI组件,了解它们的特点。
实验任务:
本实验由以下两个练习组成,要求定义按钮若干让它们按照从左向右的顺序依次排列,显示五个带图标的按钮。
这两个练习分贝考察了用程序代码直接设计界面和Jbuilder2005的用户界面设计器设计界面的两种不同情况。
练习1:
调试和运行程序ButtonCounter.java;
练习2:
用Jbuilder2005用户界面设计器设计界面。
实验步骤:
在Jbuilder2005中新建一个Chapter11.jpx工程,按照下列要求完成实验。
1.练习1调试和运行程序ButtonCounter.java
要求:
在当前工程Chapter11.jpx中,新建一个ButtonCounter.java,将程序清单11-1中的程序输入并保存。
该程序可以定义按钮若干使它们按照从左至右的顺序依次排列,显示5个带图标的按钮,运行结果如图11-2所示。
阅读和分析程序ButtonCounter.java,调试编译并运行该程序,观察该程序的运行结果是否和题意一致,如果不一致,请修改该程序。
程序结构图:
程序清单11-1
//ButtonCounter.java
importjavax.swing.*;
importjava.awt.*;
publicclassButtonCounterextendsJFrame{
publicButtonCounter(){
super("显示按钮窗口");
ImageIconIcon=newImageIcon("image/image.gif");
JButtonjbt1=newJButton("按钮",Icon);
JButtonjbt2=newJButton("按钮",Icon);
JButtonjbt3=newJButton("按钮",Icon);
JPanelp1=newJPanel();
p1.add(jbt1);
JPanelp2=newJPanel();
p2.add(jbt2);
JPanelp3=newJPanel();
p2.add(jbt3);
JPanelp4=newJPanel();
p4.add(jbt2);
JPanelp5=newJPanel();
p5.add(jbt3);
getContentPane().setLayout(newFlowLayout());
getContentPane().add(p1);
getContentPane().add(p2);
getContentPane().add(p3);
getContentPane().add(p4);
getContentPane().add(p5);
}
publicstaticvoidmain(String[]args){
//Createraframeandseritsproperties
JFrameframe=newButtonCounter();
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
实验结果:
思考
(1)给出的ButtonCounter.java程序的运行结果是否和题目给出的运行结果一致?
如果不一致,为什么不一致?
请写出原因。
如果需要修改,请写出在那个地方做修改,做什么修改?
答:
不一致。
(2)在程序的main()方法中有语句frame.pack(),该方法的作用是什么?
(3)程序中语句frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);的作用是什么?
去掉该语句,程序会出现怎样的运行结果?
(4)如果将程序的语句getContentPane().setLayout(newFlowLayout());去掉,程序的运行结果会发生变化吗?
如果不发生变化是什么原因?
如果发生变化,会出现什么现象?
请解释原因。
(5)如果将程序中的按钮组件jbt1换成java.awt包中的Button组件对象,换过后的组件和原来的JButton在外观上会出现什么不同?
11.3实验2密码验证问题
实验目的:
(1)进一步了解和掌握javax.swing包中的常用GUI组件;
(2)比较Swing包中的JTextField和JPasswordField在使用中的异同;
(3)初步了解和运用事件处理机制和Action事件的处理。
实验任务:
编写一个Java程序,实现用户根据自己的密码进入界面,如果用户输入的信息正确,则输出“欢迎***用户”,否则用户还可以尝试两次,如果尝试阶段输入的信息错误,则输出“请输入正确的信息”,如果尝试失败,用户则退出。
实验步骤:
打开JBuilder2005,打开一个已有工程如Chapter11.jpx,在该工程下完成如下练习。
练习密码验证
要求:
在当前工程如Chapter11.jpx下,新建一个文件PasswordVerification.java,将程序清单11-2中的程序输入并保存。
要求该程序完成如下功能:
用户根据自己的密码进入界面,如果用户输入的信息正确,则输出“欢迎***用户”,否则用户还可以尝试两次,如果尝试阶段输入的信息错误,则输出“请输入正确的信息”,如果尝试失败,用户则退出。
调试并编译程序PasswordVerification.java,运行该程序,运行结果如下11-6、11-7、11-8、11-9所示,请将代码1-代码7补充完整。
图11-6
程序清单11-2
//PasswordVerification.java
importjavax.swing.*;
importjava.awt.event.*;
importjava.awt.*;
publicclassPasswordVerificationextendsJFrameimplementsActionListener{
JLabeluserLabel;//定义用户标签提示
JLabelpasswordLabel;//定义密码标签提示
JTextFielduserText;//定义用户文本框
JPasswordFieldpasswordText;//定义密码文本框
intcount=1;//统计输入信息的次数
publicPasswordVerification(){
super("请输入信息");
Containercontainer=getContentPane();//代码1得到容器对象container
container.setLayout(newFlowLayout());//设置默认布局
userLabel=newJLabel("用户");//代码2创建用户标签
passwordLabel=newJLabel("密码");//代码3创建密码标签
userText=newJTextField(20);//代码4创建用户文本输入框
passwordText=newJPasswordField(20);//代码5创建密码输入文本框
passwordText.addActionListener(this);//代码6注册事件监听者
container.add(userLabel);
container.add(userText);
container.add(passwordLabel);
container.add(passwordText);
setSize(240,100);
setVisible(true);
}
publicvoidactionPerformed(ActionEventa){//代码7事件处理
StringuserName=newString("陈三");//假设为正确的用户名
Stringpassword=newString("123456");
if(e.getSource()==passwordText){
count++;
char[]passwords=passwordText.getPassword();
if(user
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)