简易计算器
【案例介绍】
1.案例描述
案例要求利用Java Swing 图形组件开发一个可以进行简单的四则运算的图形化计算器
2.运行结果
运行结果
【案例目标】
学会分析“简易计算器”程序实现的逻辑思路。
能够独立完成“简易计算器”程序的源代码编写、编译及运行。
javaswing和javafx●掌握Java Swing界面编程的应用
了解计算器逻辑运算实现
【案例分析】
要制作一个计算器,首先要知道它由哪些部分组成,如下图所示:
一个简单的图形化界面计算器,需要由界面组件、组件的时间和具体的事件处理逻辑组成。
实现一个简易图形化界面计算器可分以下几个步骤
1.UI组件创建和初始化包括窗体的创建显示计算结果文本框清除按钮数字按钮运算符等按钮的初始化
2.在窗体中添加UI组件包括放置数字键及运算符面板放置清除框面板
3.布局结束之后就是计算器的难点:编写事件处理程序。
4.按键的响应实现
5.计算逻辑的实现。
6.注册
【案例实现】
Calculator.java
1 package chapter1102;
2 import java.awt.*;
3 import java.awt.event.*;
4 import javax.swing.*;
5 import java.util.Vector;
6 import java.math.BigDecimal;
7 public class Calculator {
8           // 操作数1,为了程序的安全,初值一定设置,这里我们设置为0。   
9           String str1 = "0";   
10         // 操作数2
11     String str2 = "0";
12     // 运算符
13     String signal = "+";   
14     // 运算结果
15     String result = "";
16     // 以下k1至k5为状态开关
17     // 开关1用于选择输入方向,将要写入str1或str2
18     // 为 1 时写入 str1,为 2 时写入 str2
19     int k1 = 1;
20     // 开关 2 用于记录符号键的次数
21     // 如果 k2>1 说明进行的是 2+3-9+8 这样的多符号运算
22     int k2 = 1;
23     // 开关3用于标识 str1 是否可以被清 0
24     // 等于 1 时可以,不等于1时不能被清0
25     int k3 = 1;
26     // 开关4用于标识 str2 是否可以被清 0
27     // 等于 1 时可以,不等于1时不能被清0
28     int k4 = 1;
29     // 开关5用于控制小数点可否被录入
30     // 等于1时可以,不为1时,输入的小数点被丢掉
31     int k5 = 1;
32     // store的作用类似于寄存器,用于记录是否连续按下符号键
33     JButton store;
34     //vt 存储之前输入的运算符。
35     @SuppressWarnings("rawtypes")
36     Vector vt = new Vector(20, 10);
37     // 创建一个 JFrame 对象并初始化。JFrame 可以理解为程序的主窗体。   
38     JFrame frame = new JFrame("Calculator");
39 //创建一个JTextField对象并初始化。JTextField用于显示操作和计算结果的文本框。
40     // 参数 20 表明可以显示 20 列的文本内容
41     JTextField result_TextField = new JTextField(result, 20);
42     // 清除按钮
43     JButton clear_Button = new JButton("Clear");
44     // 数字键0到9
45     JButton button0 = new JButton("0");
46     JButton button1 = new JButton("1");
47     JButton button2 = new JButton("2");
48     JButton button3 = new JButton("3");
49     JButton button4 = new JButton("4");
50     JButton button5 = new JButton("5");
51     JButton button6 = new JButton("6");
52     JButton button7 = new JButton("7");
53     JButton button8 = new JButton("8");
54     JButton button9 = new JButton("9");
55     // 计算命令按钮,加减乘除以及小数点等
56     JButton button_Dian = new JButton(".");
57     JButton button_jia = new JButton("+");
58     JButton button_jian = new JButton("-");
59     JButton button_cheng = new JButton("*");
60     JButton button_chu = new JButton("/");
61     JButton button_dy = new JButton("=");
62     public Calculator() {
63         button0.setMnemonic(KeyEvent.VK_0);
64         result_TextField.setHorizontalAlignment(JTextField.RIGHT);
65         // 创建一个 Jpanel 对象并初始化
66         JPanel pan = new JPanel();
67         // 设置该容器的布局为四行四列,边距为5像素
68         pan.setLayout(new GridLayout(4, 4, 5, 5));
69         // 将用于计算的按钮添加到容器内
70         pan.add(button7);
71         pan.add(button8);
72         pan.add(button9);
73         pan.add(button_chu);
74         pan.add(button4);
75         pan.add(button5);
76         pan.add(button6);
77         pan.add(button_cheng);
78         pan.add(button1);
79         pan.add(button2);
80         pan.add(button3);
81         pan.add(button_jian);
82         pan.add(button0);
83         pan.add(button_Dian);
84         pan.add(button_dy);
85         pan.add(button_jia);
86         // 设置 pan 对象的边距
87         pan.ateEmptyBorder(5, 5, 5, 5));
88         // 按照同样的方式设置第二个JPanel
89         JPanel pan2 = new JPanel();
90         pan2.setLayout(new BorderLayout());
91         pan2.add(result_TextField, BorderLayout.WEST);
92         pan2.add(clear_Button, BorderLayout.EAST);
93           // 设置主窗口出现在屏幕上的位置
94         frame.setLocation(300, 200);
95         // 设置窗体可以调大小
96         frame.setResizable(true);
97         //窗体中可以放置 JPanel,这里我们面板pan和面板pan2让如窗体
98         ContentPane().setLayout(new BorderLayout());
99         ContentPane().add(pan2, BorderLayout.NORTH);
100         ContentPane().add(pan, BorderLayout.CENTER);
101         frame.pack();
102         frame.setVisible(true);
103         //Listener类中编写的是数字键的响应逻辑。
104         class Listener implements ActionListener {
105             @SuppressWarnings("unchecked")
106             public void actionPerformed(ActionEvent e) {
107                 String ss = ((JButton) e.getSource()).getText();
108                 store = (JButton) e.getSource();
109                 vt.add(store);
110                 if (k1 == 1) {
111                     if (k3 == 1) {
112                         str1 = "";
113                         k5 = 1;
114                     }
115                     str1 = str1 + ss;
116                     k3 = k3 + 1;
117                     result_TextField.setText(str1);
118                 } else if (k1 == 2) {
119                     if (k4 == 1) {
120                         str2 = "";
121                         k5 = 1;
122                 }
123                     str2 = str2 + ss;
124                     k4 = k4 + 1;
125                     result_TextField.setText(str2);
126                 }                            
127             }
128         }
129           //Listener_signal类中编写了运算符号键的响应逻辑
130         class Listener_signal implements ActionListener {
131             @SuppressWarnings("unchecked")
132             public void actionPerformed(ActionEvent e) {
133                 String ss2 = ((JButton) e.getSource()).getText();

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。