Java实验9


一、实验目的:

1.  了解Java图像用户界面的开发,掌握基本组件的使用。

2.  掌握编写独立运行的窗口界面的方法,了解菜单和对话框的使用方法。

3.  理解Java的事件处理机制,掌握为不同组件编写事件处理程序的方法。 

 

二、实验环境:

 

Eclipse

 

三、实验内容:

(一)在面板中添加多个组件,并进行合理的布局

¨        程序功能:在一个框架(Frame)容器中添加一个面板(Panel)容器,并分别在框架和面板容器中添加组件并使用不同的布局管理方式。

¨        请编写KY7_1.java 程序文件,相关源代码的提示如下。

import java.awt.*;

importjava.awt.Color;

public classKY7_1 {

public static void main(String args[]){

……   //创建一个框架f

  ……   //创建一个面板p

       ……   //把面板p添加到框架f中

       …… //设置面板p的背景颜色为蓝色

       p.setLayout(new FlowLayout());   //设置面板p的布局为流式布局

    ……   //在面板p中添加一个标签l

……  //在面板p中添加六个按钮

Choice c=new Choice ();   // 创建一个下拉列表c,

c.addItem("北京");        // 下拉列表c中有三个选项:北京、上海和天津

c.addItem("上海");

c.addItem("天津");

       ……   //把列表c添加到面板p中

……   //设置框架f的大小和可见性

   }

}

¨        将上面程序中的空缺部分添加进去,编译并执行该程序。

¨        将KY7_1.java的完整源程序写在实验报告中。

答:代码如下:

import java.awt.*;

import java.awt.Color;

publicclass KY7_1 {

publicstaticvoid 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的大小和可见性

   }

}

 

结果如下:

(二)为窗口添加菜单,并处理由菜单项所引发的事件

¨        程序功能:在窗口中添加菜单条,在菜单条中添加菜单,并在菜单中添加菜单项和子菜单。通过选择菜单项可以引发不同的事件,从而执行不同操作,例如点击“打开”菜单项可以打开一个“打开文件对话框”。

¨        编写KY7_2.java 程序文件,源代码如下。

import java.awt.*;

import java.awt.event.*;

public class KY7_2 extendsFrame implements ActionListener {

     static Frame f;         //声明一个框架

static FileDialog fd1;    //声明一个文件对话框对象

    staticFileDialog fd2;

public static void main(Stringargs[]) {

KY7_2  k = newKY7_2(); 

        f= new Frame();   // 创建一个框架f  

……   // 创建一个菜单条 mb

         ……   // 在菜单条mb中添加两个菜单m1("文件")和m2("帮助")

……   /*  "文件"菜单m1中有三个菜单项:m11("打开")、

m12("关闭")和m13("退出")*/

……  /*  "帮助"菜单m2中有三个菜单项:m21("目录")、

m22("索引")和m23("关于")*/

…… //  "文件"菜单m1中还有一个子菜单m3("编辑")

……  /*  "编辑"子菜单m3 中有三个菜单项:m31("复制")、

m32("剪切")和m33("粘贴")*/  

m11.addactionlistner(k);   /* 允许菜单项"打开"引发一个事件,该事件的处理者为当前对象 k  */

m13.addactionlistner(k);   /* 允许菜单项"退出"引发一个事件,该事件的处理者为当前对象 k  */

f.setSize(350,200);  // 设置框架f的大小

f.setMenuBar(mb);  // 设置框架f的菜单条为mb 

f.setVisible(true);   

}

public voidactionPerformed (ActionEvent e) {  /* 处理由菜单项"打开"和"退出"                                                                               所引发的事件*/

if(e.getActionCommand() == "打开") {  /* 若"打开"菜单项引发事件,则打开“打开文件对话框”*/

FileDialog fd = new FileDialog (f, "open", FileDialog.SAVE);

fd.setVisible (true);

                            }

if(e.getActionCommand() == "保存")    /* 若"保存"菜单项引发事件,则打开“保存文件对话框”*/

……  //创建并打开一个“保存文件对话框”

}

}

¨        将上面程序中的空缺部分添加进去,编译并执行该程序。

¨        将KY7_2.java的完整源程序写在实验报告中。

答:程序如下:

package ch1;

 

import java.awt.*;

importjava.awt.event.*;

publicclass KY7_2extends Frame implements ActionListener {

   staticFrame f;          //声明一个框

   staticFileDialog fd1;    //声明一个文件对话框对象

   static FileDialog fd2;

   publicstaticvoid main(String args[]) {

      KY7_2  k = newKY7_2(); 

      f = newFrame();   // 创建一个框架f 

      MenuBar mb=new MenuBar(); // 创建一个菜单条 mb

      Menu m1=new Menu("文件");

      Menu m2=new Menu("帮助"); // 在菜单条mb中添加两个菜单m1("文件")和m2("帮助")

      mb.add(m1);

      mb.add(m2);

      MenuItem m11=new MenuItem("打开"); /*  "文件"菜单m1中有三个菜单项:m11("打开")、m12("关闭")和m13("退出")*/

      MenuItem m12=new MenuItem("关闭");

      MenuItem m13=new MenuItem("关于");

      m1.add(m11);

      m1.add(m12);

      m1.add(m13);

      MenuItem m21=new MenuItem("目录");/*  "帮助"菜单m2中有三个菜单项:m21("目录")、m22("索引")和m23("关于")*/

      MenuItem m22=new MenuItem("索引");

      MenuItem m23=new MenuItem("关于");

      m2.add(m21);

      m2.add(m22);

      m2.add(m23);

      Menu m3=new Menu("编辑");//  "文件"菜单m1中还有一个子菜单m3("编辑")

      MenuItem m31=new MenuItem("复制"); /*  "编辑"子菜单m3 中有三个菜单项:m31("复制")、m32("剪切")和m33("粘贴")*/ 

      MenuItem m32=new MenuItem("剪切");

      MenuItem m33=new MenuItem("粘贴");

      m3.add(m31);

      m3.add(m32);

      m3.add(m33);

      m1.add(m3);

      m11.addActionListener(k);   /* 允许菜单项"打开"引发一个事件,该事件的处理者为当前对象 k  */

      m13.addActionListener(k);   /* 允许菜单项"退出"引发一个事件,该事件的处理者为当前对象 k  */

      f.setSize(350,200);   // 设置框架f的大小

      f.setMenuBar(mb);   // 设置框架f的菜单条为mb 

      f.setVisible(true);   

}

publicvoidactionPerformed (ActionEvent e) {  /* 处理由菜单项"打开"和"退出"                                     所引发的事件*/

   if (e.getActionCommand()== "打开") {  /* 若"打开"菜单项引发事件,则打开“打开文件对话框”*/

   FileDialog fd = newFileDialog (f, "open", FileDialog.SAVE);

   fd.setVisible(true);

             }

   if (e.getActionCommand()== "保存")    /* 若"保存"菜单项引发事件,则打开“保存文件对话框”*/

   {

      FileDialog fd2=newFileDialog (f,"save",FileDialog.SAVE);//创建并打开一个“保存文件对话框”

      fd2.setVisible(true);

   }

   }

}

结果如下:

(四)、思考题

 1.构造函数和init()方法谁先被执行?

答:int()方法是Applet程序的入口,必须要有的。而构造方法是一个类的初始化方法,例如:People people=new People(“freestyleboy21”),就是把people这个对象初始化为freestyleboy21。构造方法是容器实例化selevlet用的,init其实是构造方法调用的,即先构造方法,后int()方法,除非int()是静态的,不需要构造函数作一些初始化。


 2.编写Applet,包含两个按钮,一个按钮用于放大Applet上的一串字符串,一个按钮用于缩小;连续点击可不断放大或缩小。

答:代码如下:

import java.awt.*;

importjava.awt.event.*;

publicclass Applet extendsWindowAdapter implements ActionListener{

    private Frame f;//设置一个框架f

    private Panel p;//创建一个面板p

    private Button b1,b2;//设置两个按钮b1,b1

    private TextField t;//创建一个文本框

    inti=100;

    publicstaticvoid main(Stringargs[]){

       Applet be=new Applet();

        be.go();}

        publicvoid go(){

        f=new Frame();

        p=new Panel();

        t=new TextField("HelloWorld",10);

        b1=new Button("放大");

        b2=new Button("缩小");

        p.add(b1);

        p.add(b2);

        f.add("Center",t);

        f.add("South",p);

        f.addWindowListener(this);

        b1.addActionListener(this);

        b2.addActionListener(this);

        f.setSize(300,300);     

        f.setVisible(true);

    }//实现放大缩小功能

        publicvoidactionPerformed(ActionEvent e){

        if(e.getSource()==b1){

           i=i+4;

           Font f1=new Font("CHINESE_GB2312",Font.PLAIN,i);//设置字体

           t.setFont(f1);

           t.setText("HelloWorld");

       }

        if(e.getSource()==b2){

           i=i-4;

           Font f1=new Font("CHINESE_GB2312",Font.PLAIN,i);

           t.setFont(f1);

           t.setText("HelloWorld");

       }

    }

    publicvoidwindowClosing(WindowEvent e){

        System.exit(0);

    } 

}

 

结果如下:

 

 

四、心得体会:

 

   这一次实验主要是关于窗口界面的设计,通过这一次实验,对此也有了相应的了解,对此也能自己设计简单的窗口,获益匪浅。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值