第二次java实验.docx
《第二次java实验.docx》由会员分享,可在线阅读,更多相关《第二次java实验.docx(28页珍藏版)》请在冰点文库上搜索。
第二次java实验
第七次实验:
GUI标准组件及事件处理
一、实验目的
了解图形用户界面基本组件:
框架、面板、按钮、标签、菜单、列表等的使用方法;了解如何使用布局管理器对组件进行管理;理解和掌握Java的事件处理机制。
二、实验要求
1.了解Java图像用户界面的开发,掌握基本组件的使用。
2.掌握编写独立运行的窗口界面的方法,了解菜单和对话框的使用方法。
3.理解Java的事件处理机制,掌握为不同组件编写事件处理程序的方法。
三、实验内容
(一)在面板中添加多个组件,并进行合理的布局
♦程序功能:
在一个框架(Frame)容器中添加一个面板(Panel)容器,并分别在框架和面板容器中添加组件并使用不同的布局管理方式。
♦请编写KY7_1.java程序文件,源代码如下:
importjava.awt.*;
importjava.awt.Color;
publicclassKY7_1
{
publicstaticvoidmain(Stringargs[])
{
Framef=newFrame();//创建一个框架f
Panelp=newPanel();//创建一个面板p
f.add(p);//把面板p添加到框架f中
p.setBackground(Color.blue);//设置面板p的背景颜色为蓝色
p.setLayout(newFlowLayout());//设置面板p的布局为流式布局
Labell=newLabel();
p.add(l);//在面板p中添加一个标签l
Buttonbutton1=newButton();
Buttonbutton2=newButton();
Buttonbutton3=newButton();
Buttonbutton4=newButton();
Buttonbutton5=newButton();
Buttonbutton6=newButton();
p.add(button1);
p.add(button2);
p.add(button3);
p.add(button4);
p.add(button5);
p.add(button6);//在面板p中添加六个按钮
Choicec=newChoice();//创建一个下拉列表c,
c.addItem("北京");//下拉列表c中有三个选项:
北京、上海和天津
c.addItem("上海");
c.addItem("天津");
p.add(c);//把列表c添加到面板p中
f.setBounds(400,400,400,400);
f.setVisible(true);
f.validate();//设置框架f的大小和可见性
}
}
(二)为窗口添加菜单,并处理由菜单项所引发的事件
♦程序功能:
在窗口中添加菜单条,在菜单条中添加菜单,并在菜单中添加菜单项和子菜单。
通过选择菜单项可以引发不同的事件,从而执行不同操作,例如点击“打开”菜单项可以打开一个“打开文件对话框”。
♦编写KY7_2.java程序文件,代码如下:
importjava.awt.*;
importjava.awt.event.*;
publicclassKY7_2extendsFrameimplementsActionListener
{staticFramef;
staticFileDialogfd1;
staticFileDialogfd2;
publicstaticvoidmain(Stringargs[])
{KY7_2k=newKY7_2();
f=newFrame();
MenuBarmb=newMenuBar();
Menum1=newMenu("文件");
Menum2=newMenu("帮助");
mb.add(m1);
mb.add(m2);
MenuItemm11=newMenuItem("打开");
MenuItemm12=newMenuItem("关闭");
MenuItemm13=newMenuItem("退出");
m1.add(m11);
m1.add(m12);
m1.add(m13);
MenuItemm21=newMenuItem("目录");
MenuItemm22=newMenuItem("索引");
MenuItemm23=newMenuItem("关于");
m2.add(m21);
m2.add(m22);
m2.add(m23);
Menum3=newMenu("编辑");
MenuItemm31=newMenuItem("复制");
MenuItemm32=newMenuItem("剪切");
MenuItemm33=newMenuItem("粘贴");
m3.add(m31);
m3.add(m32);
m3.add(m33);
m1.add(m3);
m11.addActionListener(k);
m13.addActionListener(k);
f.setSize(350,200);
f.setMenuBar(mb);
f.setVisible(true);}
publicvoidactionPerformed(ActionEvente)
{if(e.getActionCommand()=="打开")
{FileDialogfd1=newFileDialog(f,"open",FileDialog.SAVE);
fd1.setVisible(true);
}
if(e.getActionCommand()=="保存")
{FileDialogfd2=newFileDialog(f,"save",FileDialog.SAVE);
fd2.setVisible(true);
}}}
三、运行题中程序,然后按【思考问题】提示来分析、修改并体验程序。
【思考问题】
1基本容器JFrame比起Frame有何特点?
为什么这里定义了一个c=this.getContentPane();
Frame是awt中的组件,JFrame是swing中的组件,JFrame包含一个JRootPane作为其唯一的子容器。
this.getContentPane()的作用是初始化一个容器,用来在容器上添加一些控件
2采用了什么布局管理器,各组件按什么次序加入组件的?
FlowLayout,从左到右排列成一行。
3很多地方用到this,这个this指什么?
1、表示对当前对象的引用;2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名时进行区分;3、用于在构造方法中引用满足指定参数类型的构造器。
4分析事件执行方法actionPerformed里面的下面三条语句起何作用?
a=Double.valueOf(TOprand1.getText()).doubleValue();
b=Double.valueOf(TOprand2.getText()).doubleValue();
Result.setText(String.valueOf(sum));
读出T0prand1和T0prand2中的数,和写入Result中。
5程序中对按钮事件的监听采用了什么方法?
请修改成另外两种方法实验。
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
classEx9_1extendsJFrame
{JTextFieldTOprand1;
JTextFieldTOprand2;
JTextFieldResult;
JLabelLAdd,LSum;
JButtonBAdd,BClear;
Containerc=null;
publicEx9_1()
{TOprand1=newJTextField("0.0000");
TOprand2=newJTextField("0.0000");
Result=newJTextField("0.0000");
LAdd=newJLabel("+");
LSum=newJLabel("=");
BAdd=newJButton("加法");
BClear=newJButton("清除");
c=this.getContentPane();
c.setLayout(newFlowLayout());
c.add(TOprand1);
c.add(LAdd);
c.add(TOprand2);
c.add(LSum);
c.add(Result);
c.add(BAdd);
c.add(BClear);
this.pack();
this.setVisible(true);
PoliceManp=newPoliceMan();
BAdd.addActionListener(p);
BClear.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{TOprand1.setText("0.0000");
TOprand2.setText("0.0000");
Result.setText(String.valueOf("0.0000"));}});
this.addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{System.exit(0);
}
});}
classPoliceManimplementsActionListener
{
publicvoidactionPerformed(ActionEvente)
{doublea,b,sum;
a=Double.valueOf(TOprand1.getText()).doubleValue();
b=Double.valueOf(TOprand2.getText()).doubleValue();
sum=a+b;
Result.setText(String.valueOf(sum));
}
}
publicstaticvoidmain(Stringargs[])
{Ex9_1mainFrame=newEx9_1();
mainFrame.setSize(350,200);
mainFrame.setTitle("GUI实验一");
}}
6将定义的类classEx9_1extendsJFrameimplementsActionListener去掉继承extendsJFrame,功能不变,程序如何修改?
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
classEx9_1implementsActionListener
{TextFieldTOprand1;
TextFieldTOprand2;
TextFieldResult;
LabelLAdd,LSum;
ButtonBAdd,BClear;
Containerc=null;
publicEx9_1()
{Framef=newFrame();
TOprand1=newTextField("0.0000");
TOprand2=newTextField("0.0000");
Result=newTextField("0.0000");
LAdd=newLabel("+");
LSum=newLabel("=");
BAdd=newButton("加法");
BClear=newButton("清除");
c.setLayout(newFlowLayout());
c.add(TOprand1);
c.add(LAdd);
c.add(TOprand2);
c.add(LSum);
c.add(Result);
c.add(BAdd);
c.add(BClear);
c.pack();
c.setVisible(true);
c.setSize(350,200);
c.setTitle("GUI实验一");
BAdd.addActionListener(this);
BClear.addActionListener(this);
f.addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{System.exit(0);
}});}
publicvoidactionPerformed(ActionEvente)
{doublea,b,sum;
if(e.getSource()==BAdd)
{a=Double.valueOf(TOprand1.getText()).doubleValue();
b=Double.valueOf(TOprand2.getText()).doubleValue();
sum=a+b;
Result.setText(String.valueOf(sum));
}
if(e.getSource()==BClear)
{TOprand1.setText("0.0000");
TOprand2.setText("0.0000");
Result.setText(String.valueOf("0.0000"));}}
publicstaticvoidmain(Stringargs[])
{Ex9_1mainFrame=newEx9_1();
}}
7设置布局管理器为null,使组件摆放次序不变,重新修改程序。
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
classEx9_1extendsJFrameimplementsActionListener
{JTextFieldTOprand1;
JTextFieldTOprand2;
JTextFieldResult;
JLabelLAdd,LSum;
JButtonBAdd,BClear;
Containerc=null;
publicEx9_1()
{TOprand1=newJTextField("0.0000");
TOprand2=newJTextField("0.0000");
Result=newJTextField("0.0000");
LAdd=newJLabel("+");
LSum=newJLabel("=");
BAdd=newJButton("加法");
BClear=newJButton("清除");
c=this.getContentPane();
c.setLayout(null);
c.add(TOprand1);
c.add(LAdd);
c.add(TOprand2);
c.add(LSum);
c.add(Result);
c.add(BAdd);
c.add(BClear);
this.pack();
this.setVisible(true);
BAdd.addActionListener(this);
BClear.addActionListener(this);
this.addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{System.exit(0);
}
});
TOprand1.setBounds(00,00,50,20);
LAdd.setBounds(60,5,10,10);
TOprand2.setBounds(80,00,50,20);
LSum.setBounds(140,5,10,10);
Result.setBounds(160,00,50,20);
BAdd.setBounds(230,00,60,20);
BClear.setBounds(270,00,60,20);
}
publicvoidactionPerformed(ActionEvente)
{doublea,b,sum;
if(e.getSource()==BAdd)
{a=Double.valueOf(TOprand1.getText()).doubleValue();
b=Double.valueOf(TOprand2.getText()).doubleValue();
sum=a+b;
Result.setText(String.valueOf(sum));
}
if(e.getSource()==BClear)
{TOprand1.setText("0.0000");
TOprand2.setText("0.0000");
Result.setText(String.valueOf("0.0000"));
}}
publicstaticvoidmain(Stringargs[])
{Ex9_1mainFrame=newEx9_1();
mainFrame.setSize(350,200);
mainFrame.setTitle("GUI实验一");
}}
实验八java小程序Applet
一、实验目的
1.了解javaApplet基本框架结构、生命期。
2.了解Applet与HTML网页之间的应用关系。
3.了解HTML向Applet传递参数。
二、实验内容
1.JavaApplet基本框架和生命期。
Java源程序是project3\Ex8_1.java;网页HTML文件是page1.html。
(1)Ex8_1.java文件:
importjava.awt.*;
importjava.applet.*;
importjavax.swing.*;
publicclassEx8_1extendsApplet
{publicinti,j,k,l;
Fontfont;
publicvoidinit()
{i++;
font=newjava.awt.Font("TimesRoman",Font.PLAIN,36);
}
publicvoidstart()
{j++;
System.out.println("启动");
}
publicvoidstop()
{k++;
System.out.println("停止");
}
publicvoidpaint(Graphicsg)
{System.out.println("作图");
l++;
intred=(int)(Math.random()*250);
intgreen=(int)(Math.random()*250);
intblue=(int)(Math.random()*250);
g.setFont(font);
g.setColor(newColor(red,green,blue));
g.drawString("初始化次数:
"+String.valueOf(i),30,50);
g.drawString("启动次数:
"+String.valueOf(j),30,90);
g.drawString("停止次数:
"+String.valueOf(k),30,130);
g.drawString("作图次数:
"+String.valueOf(l),30,170);
}
}
(2)Page1.html文件:
【实验步骤】
1在编辑区先选中Ex8_1.java,编译java源文件,形成Ex8_1.class。
2再选中page1.html,运行该程序。
3出现浏览页面之后,对页面进行缩放和展开,观察页面中初始化次数、启动次数、停止次数、作图次数的变化;注意字体颜色的变化;同时观察信息输出区中输出内容的变化。
【思考问题】
1通过实验观察,总结你对Applet框架中的基本方法在不同生命期的作用。
1.在不同的生命周期中init、start只启动时执行一次,stop只在退出时执行一次,随着i,j,k,l的变化,paint执行着不同的程序。
Init()完成初始化工作,紧接着自动调用start(),当用户由JAVAAPPLET所在WEB界面转到其他页面,调用stop(),后返回时,再次调用start()。
结束浏览时,自动调用destroy()。
Paint()可使JAVAAPPLET在容器上显示某些信息。
2字体大小及颜色的变化由哪些语句确定的?
请修改颜色为固定蓝色,字体从10到20之间变化。
intred=(int)(Math.random()*250);
intgreen=(int)(Math.random()*250);
intblue=(int)(Math.random()*250);
g.setFont(font);
g.setColor(