2024年1月9日发(作者:)
简易计算器
【案例介绍】
1.案例描述
本案例要求利用Java Swing 图形组件开发一个可以进行简单的四则运算的图形化计算器。
2.运行结果
运行结果
【案例目标】
学会分析“简易计算器”程序实现的逻辑思路。
能够独立完成“简易计算器”程序的源代码编写、编译及运行。
掌握Java Swing界面编程的应用。
了解计算器逻辑运算实现。
【案例分析】
要制作一个计算器,首先要知道它由哪些部分组成,如下图所示:
一个简单的图形化界面计算器,需要由界面组件、组件的时间监听器和具体的事件处理逻辑组成。
实现一个简易图形化界面计算器可分以下几个步骤:
组件创建和初始化:包括窗体的创建,显示计算结果文本框、清除按钮、数字按钮、运算符等按钮的初始化。
2.在窗体中添加UI组件:包括放置数字键及运算符面板、放置清除框面板。
3.布局结束之后,就是计算器的难点:编写事件处理程序。
4.按键的响应实现。
5.计算逻辑的实现。
6.注册监听器
【案例实现】
1 package chapter1102;
2 import .*;
3 import .*;
4 import .*;
5 import ;
6 import imal;
7 public class Calculator {
8 // 操作数1,为了程序的安全,初值一定设置,这里我们设置为0。
9 String str1 = "0";
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 操作数2
String str2 = "0";
// 运算符
String signal = "+";
String result = "";
// 运算结果
// 以下k1至k5为状态开关
// 开关1用于选择输入方向,将要写入str1或str2
// 为 1 时写入 str1,为 2 时写入 str2
int k1 = 1;
// 开关 2 用于记录符号键的次数
// 如果 k2>1 说明进行的是 2+3-9+8 这样的多符号运算
int k2 = 1;
// 开关3用于标识 str1 是否可以被清 0
// 等于 1 时可以,不等于1时不能被清0
int k3 = 1;
// 开关4用于标识 str2 是否可以被清 0
// 等于 1 时可以,不等于1时不能被清0
int k4 = 1;
// 开关5用于控制小数点可否被录入
// 等于1时可以,不为1时,输入的小数点被丢掉
int k5 = 1;
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// store的作用类似于寄存器,用于记录是否连续按下符号键
JButton store;
@SuppressWarnings("rawtypes")
Vector vt = new Vector(20, 10);
//vt 存储之前输入的运算符。
// 创建一个 JFrame 对象并初始化。JFrame 可以理解为程序的主窗体。
JFrame frame = new JFrame("Calculator");
//创建一个JTextField对象并初始化。JTextField用于显示操作和计算结果的文本框。
// 参数 20 表明可以显示 20 列的文本内容
JTextField result_TextField = new JTextField(result, 20);
JButton clear_Button = new JButton("Clear");
JButton button0 = new JButton("0");
JButton button1 = new JButton("1");
JButton button2 = new JButton("2");
JButton button3 = new JButton("3");
JButton button4 = new JButton("4");
JButton button5 = new JButton("5");
JButton button6 = new JButton("6");
JButton button7 = new JButton("7");
JButton button8 = new JButton("8");
JButton button9 = new JButton("9");
JButton button_Dian = new JButton(".");
JButton button_jia = new JButton("+");
JButton button_jian = new JButton("-");
JButton button_cheng = new JButton("*");
JButton button_chu = new JButton("/");
JButton button_dy = new JButton("=");
public Calculator() {
monic(_0);
result_izontalAlignment();
// 创建一个 Jpanel 对象并初始化
// 清除按钮
// 数字键0到9
// 计算命令按钮,加减乘除以及小数点等
JPanel pan = new JPanel();
// 设置该容器的布局为四行四列,边距为5像素
out(new GridLayout(4, 4, 5, 5));
(button7);
(button8);
(button9);
(button_chu);
(button4);
(button5);
// 将用于计算的按钮添加到容器内
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
(button6);
(button_cheng);
(button1);
(button2);
(button3);
(button_jian);
(button0);
(button_Dian);
(button_dy);
(button_jia);
der(EmptyBorder(5, 5, 5, 5));
JPanel pan2 = new JPanel();
out(new BorderLayout());
(result_TextField, );
(clear_Button, );
ation(300, 200);
izable(true);
tentPane().setLayout(new BorderLayout());
tentPane().add(pan2, );
tentPane().add(pan, );
();
ible(true);
class Listener implements ActionListener {
@SuppressWarnings("unchecked")
public void actionPerformed(ActionEvent e) {
String ss = ((JButton) rce()).getText();
store = (JButton) rce();
(store);
if (k1 == 1) {
if (k3 == 1) {
}
str1 = str1 + ss;
k3 = k3 + 1;
result_t(str1);
if (k4 == 1) {
str1 = "";
k5 = 1;
// 设置 pan 对象的边距
// 按照同样的方式设置第二个JPanel
// 设置主窗口出现在屏幕上的位置
// 设置窗体可以调大小
//窗体中可以放置 JPanel,这里我们将面板pan和面板pan2让如窗体
//Listener类中编写的是数字键的响应逻辑。
} else if (k1 == 2) {
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
}
}
}
str2 = "";
k5 = 1;
str2 = str2 + ss;
k4 = k4 + 1;
result_t(str2);
}
//Listener_signal类中编写了运算符号键的响应逻辑
class Listener_signal implements ActionListener {
}
@SuppressWarnings("unchecked")
public void actionPerformed(ActionEvent e) {
}
String ss2 = ((JButton) rce()).getText();
store = (JButton) rce();
(store);
if (k2 == 1) {
}
k1 = 2;
k5 = 1;
signal = ss2;
k2 = k2 + 1;
int a = ();
JButton c = (JButton) (a - 2);
if (!(t().equals("+"))
{
}
k2 = k2 + 1;
cal();
str1 = result;
k1 = 2;
k5 = 1;
k4 = 1;
signal = ss2;
&& !(t().equals("-"))
&& !(t().equals("*"))
&& !(t().equals("/")))
} else {
//Listener_clear类中编写了清除键的响应逻辑
class Listener_clear implements ActionListener {
@SuppressWarnings("unchecked")
public void actionPerformed(ActionEvent e) {
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
}
}
store = (JButton) rce();
(store);
k5 = 1;
k2 = 1;
k1 = 1;
k3 = 1;
k4 = 1;
str1 = "0";
str2 = "0";
signal = "";
result = "";
result_t(result);
();
//Listener_dy类中编写的是等于号键的响应逻辑
class Listener_dy implements ActionListener {
}
@SuppressWarnings("unchecked")
public void actionPerformed(ActionEvent e) {
}
store = (JButton) rce();
(store);
cal();
k1 = 1;
k2 = 1;
k3 = 1;
k4 = 1;
str1 = result;
//Listener_xiaos类中编写的是小数点键的相应逻辑
class Listener_xiaos implements ActionListener {
@SuppressWarnings("unchecked")
public void actionPerformed(ActionEvent e) {
store = (JButton) rce();
(store);
if (k5 == 1) {
String ss2 = ((JButton) rce()).getText();
if (k1 == 1) {
if (k3 == 1) {
}
str1 = str1 + ss2;
k3 = k3 + 1;
str1 = "";
k5 = 1;
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
}
}
}
}
result_t(str1);
if (k4 == 1) {
}
str2 = str2 + ss2;
k4 = k4 + 1;
result_t(str2);
str2 = "";
k5 = 1;
} else if (k1 == 2) {
k5 = k5 + 1;
// 监听等于键
Listener_dy jt_dy = new Listener_dy();
Listener jt = new Listener();
Listener_signal jt_signal = new Listener_signal();
Listener_clear jt_c = new Listener_clear();
Listener_xiaos jt_xs = new Listener_xiaos();
ionListener(jt);
ionListener(jt);
ionListener(jt);
button_ionListener(jt_signal);
ionListener(jt);
ionListener(jt);
ionListener(jt);
button_ionListener(jt_signal);
ionListener(jt);
ionListener(jt);
ionListener(jt);
button_ionListener(jt_signal);
ionListener(jt);
button_ionListener(jt_xs);
button_ionListener(jt_dy);
button_ionListener(jt_signal);
clear_ionListener(jt_c);
dowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
// 监听数字键
// 监听符号键
// 监听清除键
// 监听小数点键
// 窗体关闭事件的响应程序
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
}
}
(0);
});
// calc()方法中编写了计算逻辑的实现。
public void cal() {
}
@SuppressWarnings("unused")
public static void main(String[] args) {
double a2;
double b2;
String c = signal;
double result2 = 0;
if (("")) {
}
result_t("Please input operator");
if (("."))
str1 = "0.0";
str2 = "0.0";
if (("."))
a2 = f(str1).doubleValue();
b2 = f(str2).doubleValue();
if (("+")) {
}
if (("-")) {
}
if (("*")) {
BigDecimal m1 = new BigDecimal(ng(a2));
BigDecimal m2 = new
result2 = ly(m2).doubleValue();
}
if (("/")) {
}
result = ((new Double(result2)).toString());
result_t(result);
if (b2 == 0) {
}
result2 = 0;
result2 = a2 / b2;
} else {
result2 = a2 - b2;
result2 = a2 + b2;
} else {
BigDecimal(ng(b2));
296
297
298
299
300
301
302
303
304
try {
//通过 UIManager 来设置窗体的 UI 风格
kAndFeel("ookAndFeel");
}
}
} catch (Exception e) {
}
Calculator cal = new Calculator();
tackTrace();
上述代码中,第7-32行代码,定义了一些成员变量,方便响应的逻辑实现。第34-35行代码,创建了一个Vector对象,存储之前输入的运算符。第37行代码,创建了一个 JFrame
对象并初始化。JFrame 可以理解为程序的主窗体。第40行代码,创建了一个JTextField对象并初始化。JTextField用于显示操作和计算结果的文本框。参数 20 表明可以显示 20 列的文本内容。第42行代码,创建了一个清除按钮对象。第44-53行,创建数字键0-9按钮对象。第55-60行,创建计算命令按钮,加减乘除以及小数点等按钮对象。第65-101行代码,是对计算器进行布局。Listener类中编写的是数字键的响应逻辑。Listener_xiaos类中编写的是小数点键的相应逻辑。Listener_signal类中编写了运算符号键的响应逻辑。Listener_dy类中编写的是等于号键的响应逻辑。Listener_clear类中编写了清除键的响应逻辑。calc()方法中编写了计算逻辑的实现。第222-247行代码,创建监听对象,斌对各个按键进行监听。第249-253行代码,为窗体关闭事件的响应程序。第297行代码,通过 UIManager 来设置窗体的 UI 风格。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1704798422a1372736.html
评论列表(0条)