第二次java实验.doc_第1页
第二次java实验.doc_第2页
第二次java实验.doc_第3页
第二次java实验.doc_第4页
第二次java实验.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七次实验:GUI标准组件及事件处理一、实验目的了解图形用户界面基本组件:框架、面板、按钮、标签、菜单、列表等的使用方法;了解如何使用布局管理器对组件进行管理;理解和掌握 Java 的事件处理机制。 二、实验要求1. 了解Java图像用户界面的开发,掌握基本组件的使用。 2. 掌握编写独立运行的窗口界面的方法,了解菜单和对话框的使用方法。 3. 理解Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法。三、实验内容(一)在面板中添加多个组件,并进行合理的布局 程序功能:在一个框架(Frame)容器中添加一个面板(Panel)容器,并分别在框架和面板容器中添加组件并使用不同的布局管理方式。 请编写KY7_1.java 程序文件,源代码如下:import java.awt.*;import java.awt.Color; public class KY7_1public static void main(String args) Frame f = new Frame();/创建一个框架f Panel p = new Panel();/创建一个面板p f.add(p); /把面板p添加到框架f中 p.setBackground(Color.blue);/设置面板p的背景颜色为蓝色 p.setLayout(new FlowLayout(); /设置面板p的布局为流式布局 Label l = new Label(); p.add(l); /在面板p中添加一个标签l Button button1 = new Button(); Button button2 = new Button(); Button button3 = new Button(); Button button4 = new Button(); Button button5 = new Button(); Button button6 = new Button(); p.add(button1); p.add(button2); p.add(button3); p.add(button4); p.add(button5); p.add(button6); /在面板p中添加六个按钮 Choice c=new Choice(); / 创建一个下拉列表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的大小和可见性 (二)为窗口添加菜单,并处理由菜单项所引发的事件 程序功能:在窗口中添加菜单条,在菜单条中添加菜单,并在菜单中添加菜单项和子菜单。通过选择菜单项可以引发不同的事件,从而执行不同操作,例如点击“打开”菜单项可以打开一个“打开文件对话框”。复制剪切编辑 粘贴文件打开关闭帮助 m1m2m3 m退出目录索引关于 编写KY7_2.java 程序文件,代码如下:import java.awt.*;import java.awt.event.*;public class KY7_2 extends Frame implements ActionListenerstatic Frame f;static FileDialog fd1; static FileDialog fd2;public static void main(String args)KY7_2 k = new KY7_2(); f = new Frame(); MenuBar mb = new MenuBar(); Menu m1 = new Menu(文件); Menu m2 = new Menu(帮助); mb.add(m1); mb.add(m2); MenuItem m11 = new MenuItem(打开); MenuItem m12 = new MenuItem(关闭); MenuItem m13 = new MenuItem(退出); m1.add(m11); m1.add(m12); m1.add(m13);MenuItem m21 = new MenuItem(目录); MenuItem m22 = new MenuItem(索引); MenuItem m23 = new MenuItem(关于); m2.add(m21); m2.add(m22); m2.add(m23); Menu m3 = new Menu(编辑); MenuItem m31 = new MenuItem(复制); MenuItem m32 = new MenuItem(剪切); MenuItem m33 = new MenuItem(粘贴); 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);public void actionPerformed (ActionEvent e) if (e.getActionCommand() = 打开)FileDialog fd1 = new FileDialog (f, open, FileDialog.SAVE); fd1.setVisible (true); if (e.getActionCommand() = 保存)FileDialog fd2 = new FileDialog (f, save, FileDialog.SAVE); fd2.setVisible (true); 三、运行题中程序,然后按【思考问题】提示来分析、修改并体验程序。【思考问题】 基本容器JFrame比起Frame有何特点?为什么这里定义了一个c=this.getContentPane();Frame是awt中的组件,JFrame是swing中的组件,JFrame 包含一个JRootPane 作为其唯一的子容器。this.getContentPane()的作用是初始化一个容器,用来在容器上添加一些控件 采用了什么布局管理器,各组件按什么次序加入组件的?FlowLayout,从左到右排列成一行。 很多地方用到this,这个this指什么?1、表示对当前对象的引用;2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名时进行区分; 3、用于在构造方法中引用满足指定参数类型的构造器。 分析事件执行方法 actionPerformed里面的下面三条语句起何作用?a=Double.valueOf(TOprand1.getText().doubleValue(); b=Double.valueOf(TOprand2.getText().doubleValue(); Result.setText(String.valueOf(sum); 读出T0prand1和T0prand2中的数,和写入Result中。 程序中对按钮事件的监听采用了什么方法?请修改成另外两种方法实验。 import java.awt.*;import java.awt.event.*;import javax.swing.*;class Ex9_1 extends JFrame JTextField TOprand1; JTextField TOprand2; JTextField Result; JLabel LAdd,LSum; JButton BAdd,BClear; Container c=null; public Ex9_1() TOprand1=new JTextField(0.0000); TOprand2=new JTextField(0.0000); Result=new JTextField(0.0000); LAdd=new JLabel(+); LSum=new JLabel(=); BAdd=new JButton(加法); BClear=new JButton(清除); c=this.getContentPane(); c.setLayout(new FlowLayout(); 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); PoliceMan p=new PoliceMan(); BAdd.addActionListener(p); BClear.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) TOprand1.setText(0.0000); TOprand2.setText(0.0000); Result.setText(String.valueOf(0.0000);); this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); class PoliceMan implements ActionListener public void actionPerformed(ActionEvent e) double a,b,sum; a=Double.valueOf(TOprand1.getText().doubleValue(); b=Double.valueOf(TOprand2.getText().doubleValue(); sum=a+b; Result.setText(String.valueOf(sum); public static void main(String args) Ex9_1 mainFrame = new Ex9_1(); mainFrame.setSize(350, 200); mainFrame.setTitle(GUI实验一); 将定义的类class Ex9_1 extends JFrame implements ActionListener去掉继承extends JFrame,功能不变,程序如何修改?import java.awt.*;import java.awt.event.*;import javax.swing.*;class Ex9_1 implements ActionListener TextField TOprand1; TextField TOprand2; TextField Result; Label LAdd,LSum; Button BAdd,BClear; Container c=null; public Ex9_1() Frame f=new Frame(); TOprand1=new TextField(0.0000); TOprand2=new TextField(0.0000); Result=new TextField(0.0000); LAdd=new Label(+); LSum=new Label(=); BAdd=new Button(加法); BClear=new Button(清除); c.setLayout(new FlowLayout(); 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(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); public void actionPerformed(ActionEvent e) double a,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); public static void main(String args) Ex9_1 mainFrame = new Ex9_1(); 设置布局管理器为null,使组件摆放次序不变,重新修改程序。 import java.awt.*;import java.awt.event.*;import javax.swing.*;class Ex9_1 extends JFrame implements ActionListener JTextField TOprand1; JTextField TOprand2; JTextField Result; JLabel LAdd,LSum; JButton BAdd,BClear; Container c=null; public Ex9_1() TOprand1=new JTextField(0.0000); TOprand2=new JTextField(0.0000); Result=new JTextField(0.0000); LAdd=new JLabel(+); LSum=new JLabel(=); BAdd=new JButton(加法); BClear=new JButton(清除); 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(new WindowAdapter() public void windowClosing(WindowEvent e) 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); public void actionPerformed(ActionEvent e) double a,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); public static void main(String args) Ex9_1 mainFrame = new Ex9_1(); mainFrame.setSize(350, 200); mainFrame.setTitle(GUI实验一); 实验八 java小程序Applet一、实验目的1了解java Applet基本框架结构、生命期。2了解Applet与HTML网页之间的应用关系。3了解HTML向Applet传递参数。 二、实验内容1Java Applet基本框架和生命期。Java源程序是project3Ex8_1.java;网页HTML文件是page1.html。(1) Ex8_1.java文件:import java.awt.*;import java.applet.*;import javax.swing.* ;public class Ex8_1 extends Applet public int i,j,k,l;Font font;public void init() i+; font=new java .awt .Font (TimesRoman,Font.PLAIN ,36); public void start() j+; System.out.println (启动); public void stop() k+; System.out.println (停止); public void paint(Graphics g) System.out.println (作图); l+; int red =(int)(Math.random()*250); int green =(int)(Math.random ()*250); int blue =(int)(Math.random()*250); g.setFont (font); g.setColor (new Color (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文件:【实验步骤】 在编辑区先选中Ex8_1.java,编译java源文件,形成Ex8_1.class。 再选中page1.html,运行该程序。 出现浏览页面之后,对页面进行缩放和展开,观察页面中初始化次数、启动次数、停止次数、作图次数的变化;注意字体颜色的变化;同时观察信息输出区中输出内容的变化。【思考问题】 通过实验观察,总结你对Applet框架中的基本方法在不同生命期的作用。1 在不同的生命周期中init、start只启动时执行一次,stop只在退出时执行一次,随着i,j,k,l的变化,paint执行着不同的程序。Init()完成初始化工作,紧接着自动调用start(),当用户由JAVA APPLET所在WEB界面转到其他页面,调用stop(),后返回时,再次调用start()。结束浏览时,自动调用destroy()。Paint()可使JAVA APPLET 在容器上显示某些信息。 字体大小及颜色的变化由哪些语句确定的?请修改颜色为固定蓝色,字体从10到20之间变化。int red =(int)(Math.random()*250);int green =(int)(Math.random ()*250);int blue =(int)(Math.random()*250);g.setFont (font);g.setColor (new Color (red,green,blue);int a = (int)(Math.random()*10+10);/产生数10-20Font font=new Font(TimesRoman,Font.BOLD,a);g.setFont (font); g.setColor (Color.blue); 这里用到两种输出字符串语句,请指出并说明它们的不同。Drawstring()使用在指定的Brush和Font物件,System.out.println()为一般输出public abstract void drawString(String str,int x,int y)使用此图形上下文的当前字体和颜色绘制由指定 string 给定的文本。最左侧字符的基线位于此图形上下文坐标系统的 (x, y) 位置处。 System.out.println()是控制输出打印。2. HTML向Applet传递参数。HTML向Applet传进三个参数:一个字符串label;一个是背景颜色background;再一个是前景颜色foreground。在Applet侧接受过去并使用它们。(1) HTML文件是page2.html (2) Applet文件Ex8_2.java:import java.awt.*;import java.applet.*;public class Ex8_2 extends Applet String st1=new String ();String receive;int red,green,blue;Font font=null;public void init()String backcolor=getParameter(background);String forecolor=getParameter(foreground);receive=getParameter(label);this.setLayout(new BorderLayout();this.setLayout(null);Label Lab=new Label(看前景颜色对我的变化);Lab.setBounds(10,60,250,30);red=Integer.decode(0x+backcolor.substring(0,2).intValue();green=Integer.decode(0x+backcolor.substring(2,4).intValue();blue=Integer.decode(0x+backcolor.substring(4,6).intValue();this.setBackground(new Color(red,green,blue); red=Integer.decode(0x+forecolor.substring(0,2).intValue(); green=Integer.decode(0x+forecolor.substring(2,4).intValue(); blue=Integer.decode(0x+forecolor.substring(4,6).intValue();font=new Font(TimesRoman,Font.BOLD,18);this.setFont(font);this.setForeground(new Color(red,green,blue);this.add(Lab); public void paint(Graphics g) g.setColor(Color.blue); g.setFont(new Font(TimesRoman,Font.BOLD,24); g.drawString(receive,10,25); /end Applet1【实验步骤】 在编辑区先选中Ex8_2.java,编译java源文件,形成Ex8_2.class。 再选中page2.html,运行该程序。 每次修改HTML侧的background或foreground值,然后运行观察结果。【思考问题】 从HTML网页传过来的参数在Applet侧是如何获取、如何转换、如何利用的?如:网页文件中写入param name=label value=这是从网页传过来的在JAVA程序中写入 receive=getParameter(label);则receive的值即为这是从网页传过来的” 页面中显示了两个字符串,所用的方法有何不同?“看前景颜色对我的变”通过添加标签组件来显示,“这是从网页传过来的”通过调用Paint()函数来实现显示 使从HTML接受过来的字符串显示的字体和颜色与“看前景颜色对我的变化”字符串相同,怎样修改程序?将g.setColor(Color.blue);g.setFont(new Font(TimesRoman,Font.BOLD,24)改为:g.setColor(this.getForeground();g.setFont(new Font(this.getFont(),Font.BOLD,24)3.编写一个应用程序,有一个标题为“计算”的窗口,窗口的布局为FlowLayout布局。设计4个按钮,分别命名为“加”、“差”、“积”、“除”,另外,窗口中还有3个文本框。单击相应的按钮,将两个文本框的数字做运算,在第三个文本框中显示结果。要求处理NumberFormatException。import java.awt.*;import java.awt.event.*;class Calculated extends Frame implements ActionListenerTextField text1,text2,text3; /3个文本框Button buttonH,buttonC,buttonJ,buttonS; /4个按钮Calculated(String s)super(s);setLayout(new FlowLayout(); /FlowLayout布局text1=new TextField(10);text2=new TextField(10);text3=new TextField(17);buttonH=new Button(加);buttonC=new Button(差);buttonJ=new Button(积);buttonS=new Button(除);add(text1);add(text2);add(text3);text3.setEditable(false);add(buttonH);add(buttonC);add(buttonJ);add(buttonS);buttonH.addActionListener(this);buttonC.addActionListener(this);buttonJ.addActionListener(this);buttonS.addActionListener(this);addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););setBounds(100,100,160,180);setVisible(true);validate();public void actionPerformed(ActionEvent e)double num1=0,num2=0,totle=0;trynum1= Double.parseDouble(text1.getText();num2= Double.parseDouble(text2.getText();if(e.getSource()=buttonH)totle=num1+num2;text3.setText(和+totle);else if(e.getSource()=buttonC)totle=num1-num2;text3.setText(差+totle);else if(e.getSource()=buttonJ)totle=num1*num2;text3.setText(积+totle);else if(e.getSource()=buttonS)totle=num1/num2;text3.setText(商+totle);catch(NumberFormatException event)text3.setText(请输入数字字符!);public class Ex8_3public static void main(String args)Calculated calc=new Calculated(计算); /标题为“计算”的窗口4.编写应用程序,有一个窗口对象,该窗口取它的默认布局: BorderLayout布局,北面添加一个List组件,该组件有四个商品名称的选项。中心添加一个文本区,当选择List组件中的某个选项后,文本区显示对该商品的价格和产地:当双击List组件中的某个选项后,文本区显示该商品的详细广告。import java.awt.*;import java.awt.event.*;class WindowGoods extends Frame implements ActionListener,ItemListenerString s=产地:北京,产地:上海,产地:沈阳,产地:广东;String p=价格:3200,价格:158,价格:13.2,价格:320/打;String a=本商品*,本商品*,本商品*,本商品*;List list;TextArea text;WindowGoods()list=new List(3,false);text=new TextArea(6,20);text.setEditable(false);list.add(商品1);list.add(商品2);list.add(商品3);list.add(商品4);add(list,BorderLayout.NORTH);add(text,BorderLayout.CENTER);list.addItemListener(this);list.addActionListener(this);addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););setBounds(100,100,300,300);setVisible(true);validate();public void itemStateChanged(ItemEvent e)if(e.getItemSelectable()=list)int m=list.getSelectedIndex();text.setText(pm+n+sm);public void actionPerformed(ActionEvent e)int n=list.getSelectedIndex();text.setText(an);public class Ex8_4public static void main(String args)new WindowGoods();5.编写应用程序,有一个标题为“改变颜色”的窗口,窗口的布局为null,在窗口中有3个按钮和一个画布,3个按钮的颜色分别是红、绿、蓝。单击相应的按钮,画布绘制相应颜色

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论