实验五 图形用户界面设计.docx
实验五 图形用户界面设计 实验五图形用户界面设计(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_21 Demo5_21() Frame f=new Frame("初始窗口"); f.setSize(350,200); f.setVisible(true); /为窗口添加窗口事件适配器 f.addWindowListener(new WindowAdapter() /内部匿名类关闭窗口,实现方法windowClosing public 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); / 设置菜单栏为mb show();/ 显示组件 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.完成下面“个人信息调查”用户界面的设计,当选择相应选项时,单击“提交”,在文本框中显示提示信息,单击“清空”,内容清空