一、实验目的:

    了解图形用户界面基本组件:框架、面板、按钮、标签、菜单、列表等的使用方法;了解如何使用布局管理器对组件进行管理;理解和掌握 Java 的事件处理机制。

二、实验环境:

       Windows下java SE。

三、实验内容:

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

¨         程序功能:在一个框架(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 javax.swing.*;

¨         import java.awt.Color;

¨         publicclassKY7_1 {

¨         publicstaticvoidmain(String args[]){

¨            JFrame f=new JFrame("f");//创建一个框架f

¨            JPanel p=new JPanel();//创建一个面板p

¨            f.add(p);//把面板p添加到框架f

¨            p.setBackground(Color.blue);//设置面板p的背景颜色为蓝色

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

¨            JLabel l=new JLabel();

¨            p.add(l);//在面板p中添加一个标签l

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

¨            JButtonb1=new JButton();

¨            JButtonb2=new JButton();

¨            JButtonb3=new JButton();

¨            JButtonb4=new JButton();

¨            JButtonb5=new JButton();

¨            JButtonb6=new JButton();

¨            p.add(b1);

¨            p.add(b2);

¨            p.add(b3);

¨            p.add(b4);

¨            p.add(b5);

¨            p.add(b6);

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

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

¨         c.addItem("上海");

¨         c.addItem("天津");

¨             p.add(c);//把列表c添加到面板p

¨             f.setVisible(true);//设置框架f的大小和可见性

¨             f.setSize(300,300);

¨            }

¨         }

 

 

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

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

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

import java.awt.*;

import java.awt.event.*;

public class KY7_2 extendsFrame implements ActionListener {

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

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

     static FileDialog fd2;

public static void main(String args[]) {

KY7_2  k = new KY7_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的完整源程序写在实验报告中。

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

publicclass KY7_2 extends Frame implements ActionListener {

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

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

   static FileDialog fd2;

   publicstaticvoid main(String args[]) {

      KY7_2  k = newKY7_2(); 

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

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

      Menum1,m2;

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

      m1=new Menu("文件");

      m2=new Menu("帮助");

      mb.add(m1);

      mb.add(m2);

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

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

      MenuItemm11,m12,m13;

      m11=new MenuItem("打开");

      m12=new MenuItem("关闭");

      m13=new MenuItem("退出");

      m1.add(m11);

      m1.add(m12);

      m1.add(m13);

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

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

      MenuItemm21,m22,m23;

      m21=new MenuItem("目录");

      m22=new MenuItem("索引");

      m23=new MenuItem("关于");

      m2.add(m21);

      m2.add(m22);

      m2.add(m23);

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

      Menum3;

      m3=new Menu("编辑");

      m1.add(m3);

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

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

      MenuItemm31,m32,m33;

      m31=new MenuItem("复制");

      m32=new MenuItem("剪切");

      m33=new MenuItem("粘贴");

      m3.add(m31);

      m3.add(m32);

      m3.add(m33);

      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() == "打开") {  /* "打开"菜单项引发事件,则打开打开文件对话框”*/

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

         fd.setVisible (true);

      }

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

         FileDialogfd2=new FileDialog(f,"save",FileDialog.SAVE);

         fd2.setVisible(true);//创建并打开一个保存文件对话框

      }

   }

}

思考题

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

构造函数先执行。

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

3、     import java.awt.*;

4、     import java.awt.event.*;

5、     publicclassWindowMenu extendsWindowAdapter implements ActionListener{

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

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

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

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

10、       inti=100;

11、       publicstaticvoid main(String args[]){

12、            WindowMenube=new WindowMenu();

13、            be.go();

14、       }

15、       publicvoid go(){

16、            f=new Frame();

17、            p=new Panel();

18、            t=new TextField("666",10);

19、            b1=new Button("放大");

20、            b2=new Button("缩小");

21、            p.add(b1);

22、            p.add(b2);

23、            f.add("Center",t);

24、            f.add("South",p);

25、            f.addWindowListener(this);

26、            b1.addActionListener(this);

27、            b2.addActionListener(this);

28、            f.setSize(300,300);     

29、            f.setVisible(true);

30、       }

31、       //实现放大缩小功能

32、            publicvoidactionPerformed(ActionEvent e){

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

34、                  i=i+4;

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

36、                  t.setFont(f1);

37、                  t.setText("zhoujiali");

38、               }

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

40、                  i=i-4;

41、                  Fontf1=new Font("CHINESE_GB2312",Font.PLAIN,i);

42、                  t.setFont(f1);

43、                  t.setText("zhoujiali");

44、               }

45、            }

46、            publicvoidwindowClosing(WindowEvent e){

47、               System.exit(0);

48、            } 

49、           }

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐