您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 实验五---图形用户界面设计
实验五图形用户界面设计(2)一、实验目的(1)掌握编写独立运行的窗口界面的方法。(2)了解JavaSwing组件的使用方法。(3)理解Java的事件处理机制,掌握为不同组件编写事件处理程序的方法。(4)掌握常用图形用户界面的设计方法。二、实验要求通过实验理解java的事件处理机制,能够对常见事件AcitonEvent,WindowEvent,KeyEvent,MouseEvent进行处理。三、实验内容(一)建立独立运行的窗口界面并使用匿名类处理事件最常使用的容器是窗口,在Java中窗口由Frame或JFrame类生成,编写Demo5_21.java程序文件。程序功能:创建一个具有关闭功能的空白窗口。源代码如下:importjava.awt.*;importjava.awt.event.*;publicclassDemo5_21{Demo5_21(){Framef=newFrame(初始窗口);f.setSize(350,200);f.setVisible(true);//为窗口添加窗口事件适配器f.addWindowListener(newWindowAdapter(){//内部匿名类关闭窗口,实现方法windowClosingpublicvoidwindowClosing(WindowEvente){System.exit(0);}});}publicstaticvoidmain(String[]args){newDemo5_21();}}编译并运行程序[思考]导入包时,可否将importjava.awt.event.*;省去不写。为什么?(二)使用Swing组件、了解事件处理机制在Java中,能够实现图形用户界面的类库有两个:java.awt和javax.swing。前者称为抽象窗口工具库AWT(AbstractWindowsToolkit),后者是Java基础类库JFC(JavaFoundationClasses)的一个组成部分,它提供了一套功能更强、数量更多、更美观的图形用户界面组件。Swing组件名称和AWT组件名称基本相同,但以J开头,例如AWT按钮类的名称是Button,在Swing中的名称则是JButton。先运行程序下面程序Demo5_22.java,然后按【思考问题】提示来分析、修改并体验程序。importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classDemo5_22extendsJFrameimplementsActionListener{JTextFieldTOprand1;JTextFieldTOprand2;JTextFieldResult;JLabelLAdd,LSum;JButtonBAdd,BClear;Containerc=null;//构造方法,形成用户界面publicDemo5_22(){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);BAdd.addActionListener(this);BClear.addActionListener(this);//匿名内部类实现事件处理this.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[]){Demo5_22mainFrame=newDemo5_22();mainFrame.setSize(350,200);mainFrame.setTitle(GUI实验一);}}【思考】①基本容器JFrame比起Frame有何特点?为什么这里定义了一个c=this.getContentPane();②采用了什么布局管理器,各组件按什么次序加入组件的?③很多地方用到this,这个this指什么?④分析事件执行方法actionPerformed里面的下面三条语句起何作用?a=Double.valueOf(TOprand1.getText()).doubleValue();b=Double.valueOf(TOprand2.getText()).doubleValue();Result.setText(String.valueOf(sum));⑤程序中对按钮事件的监听采用了什么方法?(三)ItemEvent事件,进一步理解事件处理机制1.选择复选框和单选框按钮的事件处理程序程序功能:在Applte上创建复选框、单选框、文本区域、单行文本框等组件,并实现根据用户输入的10进制数,选择不同选项可转换为2、8、16进制数。编写Demo6_4.java程序文件,源代码如下:importjava.applet.Applet;importjava.awt.*;importjava.awt.event.*;publicclassDemo5_23extendsAppletimplementsItemListener{TextAreaarea=newTextArea(6,30);//创建文本区StringItem[]={2进制,8进制,16进制,10进制};Checkboxcb[]=newCheckbox[5];Checkboxradio[]=newCheckbox[5];Labell=newLabel(输入10进制数);TextFieldTF=newTextField(6);//创建单行文本框publicvoidinit(){add(l);add(TF);add(area);add(newLabel(请选择进制:));for(inti=0;i4;i++){cb[i]=newCheckbox(Item[i]);add(cb[i]);cb[i].addItemListener(this);}CheckboxGroupcbGroup=newCheckboxGroup();//创建单选框add(newLabel(请选择进制:));for(inti=0;i4;i++){radio[i]=newCheckbox(Item[i],cbGroup,false);add(radio[i]);radio[i].addItemListener(this);}}publicvoiditemStateChanged(ItemEvente){intx=Integer.parseInt(TF.getText());if(e.getItem()==2进制)area.append(你选择的是+e.getItem()+Integer.toBinaryString(x)+\n);if(e.getItem()==8进制)area.append(你选择的是+e.getItem()+Integer.toOctalString(x)+\n);if(e.getItem()==16进制)area.append(你选择的是+e.getItem()+Integer.toHexString(x)+\n);if(e.getItem()==10进制)area.append(你选择的是+e.getItem()+x+\n);}}编译程序Demo5_23.java。编写显示Applet的页面文件Demo5_23.html(四)菜单的响应事件importjava.awt.*;importjava.awt.event.*;publicclassDemo5_24extendsFrameimplementsActionListener{Panelp=newPanel();Buttonb=newButton(退出);MenuBarmb=newMenuBar();//以下生成菜单组件对象Menum1=newMenu(文件);MenuItemopen=newMenuItem(打开);MenuItemclose=newMenuItem(关闭);MenuItemexit=newMenuItem(退出);Menum12=newMenu(编辑);MenuItemcopy=newMenuItem(复制);MenuItemcut=newMenuItem(剪切);MenuItempaste=newMenuItem(粘贴);Menum2=newMenu(帮助);MenuItemcontent=newMenuItem(目录);MenuItemindex=newMenuItem(索引);MenuItemabout=newMenuItem(关于);Demo5_24(){super(添加菜单的窗口);setSize(350,200);add(South,p);p.add(b);b.addActionListener(this);m1.add(open);//将菜单项加入到菜单m1中m1.add(close);m1.addSeparator();//在菜单中添加分隔条m1.add(exit);open.addActionListener(this);//给菜单项open注册事件监听器exit.addActionListener(this);mb.add(m1);//将菜单m1加入到菜单栏mb中m12.add(copy);m12.add(cut);m12.add(paste);m1.add(m12);//将m12作为2级菜单添加到m1菜单项中m2.add(content);m2.add(index);m2.addSeparator();m2.add(about);mb.add(m2);setMenuBar(mb);//设置菜单栏为mbshow();//显示组件}publicstaticvoidmain(Stringargs[]){newDemo5_24();}publicvoidactionPerformed(ActionEvente){if(e.getActionCommand()==退出)System.exit(0);if(e.getActionCommand()==打开)newDemo5_3();}}四、实验练习题1.在上周实验的基础上,添加事件响应,运行结果如图示界面。用户名和密码正确,显示如左图,否则显示如图。2.在上周程序基础上完成猜数字游戏。3.完成下面“个人信息调查”用户界面的设计,当选择相应选项时,单击“提交”,在文本框中显示提示信息,单击“清空”,内容
本文标题:实验五---图形用户界面设计
链接地址:https://www.777doc.com/doc-5577515 .html