当前位置:文档之家› Java计算器设计与实现

Java计算器设计与实现

3
图 4.3 类的结构图
4.1 第 1 个任务:计算器窗体的实现
4.1.1 窗体及布局管理器
开发图形用户界面应用程序首先要选择顶层容器,所有其他组件必须放到
顶层容器中。Frame 就是一个顶层容器,其可以创建窗体,用于容纳其他组件,
如面板组件 Panel、按钮组件 Button、文本域组件 TextField 等。
implements
8
setSize(300,200); addWindowListener(this); } public void windowClosing(WindowEvent e) { System.exit(0); //退出系统。 } public void windowClosed(WindowEvent e) {}
图 4.3。 类图中的箭头表示类的调用关系。 箭头指向被调用的类。 Constructor 表示该方法是类的构造方法。 类的属性前面的“-”号表示该属性是私有的。 类的操作前面的“+”号表示该操作是公有的。 类图中类的属性在 Java 语言中称为类的成员变量。 类图中类的操作在 Java 语言中称为类的成员方法。
public void windowOpened(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
图 4.1 计算器
1
图 4.1 是典型的计算器。使用计算器可以执行加(+)、减(-)、乘(*)和除(/) 运算、求平方根(sqrt)、求立方根(cbrt)、求倒数(1/x)、求相反数(+/-)、将 显示的数字与内存中存储的数字相加(M+)、调用存储的数字(MR)、清除内存中 存储的数字(MC)、删除当前显示数字的最后一位,即退格(Backspace)、清除显 示的数字,即清零(C)。
7
图 4.5 窗体事件处理示意图 程序清单 4.1.2 BorderLayoutDemo2.java import java.awt.*; import java.awt.event.*; public class BorderLayoutDemo2 extends Frame WindowListener{ public BorderLayoutDemo2(){ super("边框布局演示"); add(new Button("东"),BorderLayout.EAST); add(new Button("西"),BorderLayout.WEST); add(new Button("南"),BorderLayout.SOUTH); add(new Button("北"),BorderLayout.NORTH); add(new Button("中"),BorderLayout.CENTER);
9
注册窗体监听器
addWindowListener
10
窗体适配器
WindowAdapter
11
容器
Container
12
流布局
FlowLayout
13
网格布局
GridLayout
14
动作监听器
ActionListener
15
字符串缓冲区
StringBuffer
16
导入
import
17
事件
event
18
public class BorderLayoutDemo extends Frame implements WindowListener (3)在构造方法中注册窗体事件监听器。 句法:事件源.addWindowListener(窗体事件监听者)。
(4)实现 WindowListener 的所有方法,重写关注的方法。 public void windowClosing(WindowEvent e) {
System.exit(0); //退出系统。 } public void windowClosed(WindowEvent e) {} public void windowOpened(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowActivated(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {}
标 题 和 边 框 的 顶 层 窗 口 。 Window 和 Frame 的 默 认 布 局 都 是 边 框 布 局
BorderLayout。
Frame 有 4 种构造方法,其中常用的有 2 种。如表 4.2 所示。
表 4.2 Frame 类的常用构造方法
构造方法签名
用途
Frame()
构造一个最初不可见的 Frame对象
5
(4)代码第 12 行至第 14 行为主方法。第 13 行创建 AWT 窗体并设置其可见 性为真,即显示窗体。
程序清单 4.1.1 运行结果如图 4.4。
图 4.4 边框布局演示
该 AWT 窗体的右上角有三个图标,分别控制窗体的最小化、最大化和关闭。 最小化图标和最大化图标的功能是内置的,无需编程实现。而当用户单击关闭 图标时,AWT 窗体无任何响应。如果用户要关闭 AWT 窗体,只能通过 Windows 任 务管理器结束 java.exe 进程来实现。因此,关闭图标的功能需要编程实现。
public void windowDeactivated(WindowEvent e) {}
public static void main(String[] args) { new BorderLayoutDemo2().setVisible(true);
} } 程序清单 4.1.2 编译运行结果如图 4.4,单击窗体的关闭图标,窗体关闭, 退出系统。查看 Windows 任务管理器的进程,会发现 java.exe 进程已结束。 程序清单 4.1.2 比程序清单 4.1.1 多了以下几行代码: import java.awt.event.*; 上面代码的作用是导入 AWT 事件处理包,凡是涉及事件处理的 java 程序, 都要导入这个包。 public class BorderLayoutDemo2 extends Frame
4.1.2 窗体事件处理 Java 事件处理机制采用事件源->事件监听者模型,产生事件的对象称为事
件源,接收并处理事件的对象称为事件监听器。 窗体事件是指示窗体状态改变的低级别事件。当打开、关闭、激活、停用、
图标化或取消图标化窗体时,或者焦点转移到窗体内或移出窗体时,由窗体生 成 WindowEvent 事件。产生事件的组件称为事件源。例如,窗体产生 WindowEvent 事件,窗体就是事件源。当用户单击某个按钮时会产生动作事件 ActionEvent, 该按钮就是事件源。
Frame 类的定义如下:
public class Frame extends Window implements MenuContainer
由定义可知,窗体类Frame是窗口类Window的子类,其实现了菜单容器接口
MenuContainer。Window 是一个没有边界和菜单栏的顶层窗口。Frame 是带有
【术语中英对照速查】
表 4.1 术语中英对照速查表
序号
中文
英文
1
抽象窗口工具包
AWT(Abstract Window Toolkit)
2
窗体、框架
Frame
3
面板
Panel
4
文本域
TextField
5
按钮
Button
6
边框布局
BorderLayout
7
窗体事件
WindowEvent
8
窗体监听器
WindowListener
4
Frame(String title) 构造一个最初不可见的、具有指定标题的 Frame 对象 程序清单 4.1.1 演示向 AWT 窗体添加 5 个按钮的效果。 程序清单 4.1.1 BorderLayoutDemo.java
import java.awt.*; public class BorderLayoutDemo extends Frame{
9
implements WindowListener 上 面代码的作用是继承 Frame 类实现 WindowListener 接口。这使得 BorderLayoutDemo2 类成为窗体事件监听器。 addWindowListener(this); 上面代码的作用是注册窗体事件监听器。
6
下面以自定义类BorderLayoutDemo为例,讲解窗体事件处理的基本方法。 请参看图 4.5。 (1)导入AWT事件处理包。 import java.awt.event.*; (2) BorderLayoutDemo继承Frame类并实现WindowListener接口,成为窗体事件 监听器。
public BorderLayoutDemo(){ super("边框布局演示"); add(new Button("东"),BorderLayout.EAST); add(new Button("西"),BorderLayout.WEST); add(new Button("南"),BorderLayout.SOUTH); add(new Button("北"),BorderLayout.NORTH); add(new Button("中"),BorderLayout.CENTER); setSize(300,200);
相关主题