1
00:00:04,260 --> 00:00:09,360
好，下面我们来看一个例子。

2
00:00:09,360 --> 00:00:17,280
这个就是一个小小的计算器，这个计算器呢就可以模拟我们平时一个简单的计算器，

3
00:00:17,280 --> 00:00:22,160
有各种数字，然后还有加减乘除，还有一个

4
00:00:22,160 --> 00:00:27,575
CE 就是清除按钮，重置按钮，这里面

5
00:00:27,575 --> 00:00:32,990
有一个文本框，这里就是按钮。所以从布局的角度我们可以

6
00:00:32,990 --> 00:00:40,915
这样做，上面是一个面板，底下又是一个面板，然后这两个面板加到 整个大的这个

7
00:00:40,915 --> 00:00:46,270
Frame 里头。上面这个面板又由两个部分组成。

8
00:00:46,270 --> 00:00:55,735
一个是左边这个文本框，一个是按钮。那这里我们也可以 用这个 border

9
00:00:55,735 --> 00:01:01,072
layout 来做，然后这里面呢 用 grid

10
00:01:01,072 --> 00:01:06,900
layout 来做，然后我们添加上事件就可以。好，我们下面看看

11
00:01:06,900 --> 00:01:12,389
这个代码。请看这里，我们这个 JCalculator 这个对象它是继承了

12
00:01:12,389 --> 00:01:18,390
JFrame， 同时实现了 ActionListener，我们就可以呢

13
00:01:18,390 --> 00:01:24,108
有 ActionPerform 方法，这里面有一系列的按钮，buttons

14
00:01:24,108 --> 00:01:28,632
有个数组，然后有一个清除 按钮，还有一个用来显示的

15
00:01:28,632 --> 00:01:33,850
display 这个文本框，就是 TextField。

16
00:01:33,850 --> 00:01:41,980
在构造方法里面，我们做了一些工作，包括 有一个字体，这个字体有个什么字体名，字体的

17
00:01:41,980 --> 00:01:49,920
那个样式，就是粗体，字体大小等等。最重要就是我们有两个面板，一个是头部面板，P-
anel

18
00:01:49,920 --> 00:01:57,860
Head，然后一个呢是 PanelBody。那我们在界面对象里面命名的时候呢，有一种

19
00:01:57,860 --> 00:02:05,860
命名方法，这个命名方法叫匈牙利命名法，也就是说是一个匈牙利

20
00:02:05,860 --> 00:02:10,465
籍的工程师发明的一个方法，也可以参考这个方法。

21
00:02:10,465 --> 00:02:16,690
它是命名就在前面用几个字母表示它是什么类型，比如说 Panel 就用关键字母

22
00:02:16,690 --> 00:02:22,090
pnl 表示它是一个面板，然后呢再用一个

23
00:02:22,090 --> 00:02:29,110
单词，或者两个单词表示这个面板的用途，也就是说它既表明了类型，又表明了用途。

24
00:02:29,110 --> 00:02:32,340
所以这个方法挺好的，大家可以借鉴。

25
00:02:32,340 --> 00:02:37,360
所以上面这个面板它是一个 border
layout，border layout，然后有

26
00:02:37,360 --> 00:02:42,380
一个显示区域是用 CENTER，那么东边也就是右边，

27
00:02:42,380 --> 00:02:48,780
它显示的用一个 reset 按钮，所以把这个加进去。然后底下这个面板呢，

28
00:02:48,780 --> 00:02:53,656
是一个 Body，主体区呢是加了很多按钮，加了很多按钮，就是

29
00:02:53,656 --> 00:02:58,190
add 了很多按钮， 就加减乘除啊，1 2 3 4都加进去。

30
00:02:58,190 --> 00:03:03,641
然后这个整个 Frame 的 layout，又是一个 border

31
00:03:03,641 --> 00:03:11,005
layout，我们把头部呢 加到北边 north
上边，然后 Body 呢加到 center 里面。

32
00:03:11,005 --> 00:03:15,820
好，这是我们整个的面板和布局。

33
00:03:15,820 --> 00:03:20,989
下面就是 add ActionListener，那么这个每一个按钮的
add ActionListener 都是

34
00:03:20,989 --> 00:03:26,361
this，这个 this 是因为我们当前这个对象呢 就实现了这个

35
00:03:26,361 --> 00:03:31,380
Listener，也就是说里面有一个 ActionPerform

36
00:03:31,380 --> 00:03:37,585
的方法，这个 Action Perform
的方法里面有一个 ActionEvent 事件。

37
00:03:37,585 --> 00:03:41,750
我们用 getSource 从而得到这个事件发出的对象，

38
00:03:41,750 --> 00:03:51,068
发出的对象，这个对象呢我们根据这个对象它是什么，比如说它是重置按钮，
我们就调这个方法，如果它是 1 2 3 4

39
00:03:51,068 --> 00:03:57,500
5 6 7 8 9 啊什么 等等，点啊，就调这个数字，处理数字，

40
00:03:57,500 --> 00:04:03,410
那么否则就是加减乘除，我们就处理这个操作服务加减乘除。

41
00:04:03,410 --> 00:04:09,320
那处理数字加减乘除呢，这里面一个基本的要素是

42
00:04:09,320 --> 00:04:14,550
我们在这里呢有几个变量，程序里面最核心的就是变量。

43
00:04:14,550 --> 00:04:21,070
那这个变量里面呢就是它是不是最开始那个数字，有点特殊性，最开始那个数字呢

44
00:04:21,070 --> 00:04:28,610
也就是我们按了比如说加减乘除后，又开始一个数字，所以要马上开始数字呢，我们有个状态，

45
00:04:28,610 --> 00:04:36,240
那么在数字的状态下呢，我们就直接数字连数字，数字连接数字，所以这个时候呢

46
00:04:36,240 --> 00:04:41,765
有一个状态，然后这里呢就是我们当前记录的这个结果，然后还有呢

47
00:04:41,765 --> 00:04:47,290
上一次按的这个加减乘除我们得记下来。比如上次按了加我们

48
00:04:47,290 --> 00:04:55,045
在按下一次的时候我们得把上次的那个加号给加起来，就是记录的上一次的运算那个

49
00:04:55,045 --> 00:05:02,800
符号。处理数字呢比较简单，如果是开始是第一个，要马上开始第一个数字呢，直接

50
00:05:02,800 --> 00:05:07,910
把这个，我们的这个数字放上去就可以了。

51
00:05:07,910 --> 00:05:14,060
否则的话，我们是把它加上这个，就把已经有的那个

52
00:05:14,060 --> 00:05:20,217
数字加上当前输入的数字，就是 setText，getText

53
00:05:20,217 --> 00:05:28,340
加上。然后 如果是小数点，那么小数点得稍微处理，如果已经有小数点我们就不能

54
00:05:28,340 --> 00:05:35,270
动作了，所以如果是没有小数点，我们把这个小数点给加到那个显示面板上去。

55
00:05:35,270 --> 00:05:40,930
然后重置呢就是回到初始状态，这个代码呢大家可以细看，我这里

56
00:05:40,930 --> 00:05:48,480
就不详细讲。然后当然核心的就是，当然如果是我们加减乘除 就根据我们原先的这个

57
00:05:48,480 --> 00:05:54,530
operator 加减乘除来加减乘除，再等，所以呢计算结果。

58
00:05:54,530 --> 00:05:59,695
同时呢把这个新的，因为我们又新按了一个 operator，

59
00:05:59,695 --> 00:06:04,860
把这个新的 operator 把它记下来，以便于下一次呢

60
00:06:04,860 --> 00:06:13,460
再重新运算，同时呢 告诉它又要准备接收一个新的一个数字了，

61
00:06:13,460 --> 00:06:19,320
就这么一个状态。所以这个程序呢还是挺好的。
