实验五---图形用户界面设计(共6页).doc
精选优质文档-倾情为你奉上实验五 图形用户界面设计(2)一、实验目的(1) 掌握编写独立运行的窗口界面的方法。(2) 了解 Java Swing 组件的使用方法。(3) 理解 Java 的事件处理机制,掌握为不同组件编写事件处理程序的方法。(4) 掌握常用图形用户界面的设计方法。二、实验要求 通过实验理解java的事件处理机制,能够对常见事件AcitonEvent, WindowEvent, KeyEvent, MouseEvent进行处理。三、实验内容(一)建立独立运行的窗口界面并使用匿名类处理事件最常使用的容器是窗口,在Java 中窗口由Frame或JFrame 类生成,编写Demo5_21.java程序文件。程序功能:创建一个具有关闭功能的空白窗口。源代码如下:import java.awt.*;import java.awt.event.*;public class Demo5_21Demo5_21()Frame f=new Frame("初始窗口");f.setSize(350,200);f.setVisible(true); /为窗口添加窗口事件适配器f.addWindowListener(new WindowAdapter() /内部匿名类关闭窗口,实现方法windowClosingpublic void windowClosing(WindowEvent e)System.exit(0););public static void main(String args) new Demo5_21();编译并运行程序思考 导入包时,可否将import java.awt.event.*;省去不写。为什么?(二)使用 Swing 组件、了解事件处理机制在Java 中,能够实现图形用户界面的类库有两个:java.awt 和javax.swing。前者称为抽象窗口工具库AWT(Abstract Windows Toolkit),后者是Java 基础类库JFC(Java Foundation Classes)的一个组成部分,它提供了一套功能更强、数量更多、更美观的图形用户界面组件。Swing 组件名称和AWT 组件名称基本相同,但以J 开头,例如AWT 按钮类的名称是Button,在Swing 中的名称则是JButton。先运行程序下面程序Demo5_22.java,然后按【思考问题】提示来分析、修改并体验程序。import java.awt.*;import java.awt.event.*;import javax.swing.*;class Demo5_22 extends JFrame implements ActionListener JTextField TOprand1; JTextField TOprand2; JTextField Result; JLabel LAdd,LSum; JButton BAdd,BClear; Container c=null; /构造方法,形成用户界面 public Demo5_22 () 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); BAdd.addActionListener(this); BClear.addActionListener(this); /匿名内部类实现事件处理 this.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) Demo5_22 mainFrame = new Demo5_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 程序文件,源代码如下:import java.applet.Applet;import java.awt.*;import java.awt.event.*;public class Demo5_23 extends Applet implements ItemListener TextArea area=new TextArea(6,30);/创建文本区String Item="2 进制","8 进制","16 进制","10 进制"Checkbox cb=new Checkbox5;Checkbox radio=new Checkbox5;Label l=new Label("输入10 进制数");TextField TF=new TextField(6);/创建单行文本框public void init() add(l);add(TF);add(area);add(new Label(" 请选择进制:");for(int i=0; i<4; i+) cbi=new Checkbox(Itemi);add(cbi);cbi.addItemListener(this);CheckboxGroup cbGroup=new CheckboxGroup();/创建单选框add(new Label("请选择进制:");for(int i=0; i<4; i+) radioi=new Checkbox(Itemi,cbGroup,false);add(radioi);radioi.addItemListener(this);public void itemStateChanged(ItemEvent e) int x=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(四)菜单的响应事件import java.awt.*;import java.awt.event.*;public class Demo5_24 extends Frame implements ActionListener Panel p=new Panel();Button b=new Button("退出");MenuBar mb=new MenuBar(); / 以下生成菜单组件对象Menu m1=new Menu("文件");MenuItem open=new MenuItem("打开");MenuItem close=new MenuItem("关闭");MenuItem exit=new MenuItem("退出");Menu m12=new Menu("编辑");MenuItem copy=new MenuItem("复制");MenuItem cut=new MenuItem("剪切");MenuItem paste=new MenuItem("粘贴");Menu m2=new Menu("帮助");MenuItem content=new MenuItem("目录");MenuItem index=new MenuItem("索引");MenuItem about=new MenuItem("关于");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();/ 显示组件public static void main(String args) new Demo5_24();public void actionPerformed(ActionEvent e) if (e.getActionCommand()="退出")System.exit(0);if (e.getActionCommand()="打开")new Demo5_3();四、实验练习题1.在上周实验的基础上,添加事件响应,运行结果如图示界面。用户名和密码正确,显示如左图,否则显示如图。2.在上周程序基础上完成猜数字游戏。3.完成下面“个人信息调查”用户界面的设计,当选择相应选项时,单击“提交”,在文本框中显示提示信息,单击“清空”,内容清空专心-专注-专业