java swing实现简易计算器

java swing实现简易计算器


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条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信