Java实战之亲戚关系计算器(swing版)(2)——功能介绍

 

功能一:计算亲属关系称谓

比如说:爸爸的爸爸的爸爸是曾祖父,在上面的文本域中显示关系链,而在下面的文本域中显示称谓,这就是计算亲属关系称谓的功能。

点击”父“按钮,在最上面的文本域中出现”爸爸“,当再次点击”父“按钮的时候,在刚才的“爸爸”后面“添加”的爸爸“,如此再点击其他按钮都在其后面添加”的爸爸“或者其他关系称谓。

但是必须注意的是,当第一次点击任意关系称谓按钮的时候,不能添加”的“前缀。

Java实战之亲戚关系计算器(swing版)(2)——功能介绍

实现思路解析:”计算“按钮的实现思路是专门设置一个数据集合来存放【关系——关系称谓】之间的这种联系,而在这个项目中所使用的是是Map集合。Map集合的数据关系是键值对(即key——value),可以将key设置为关系链,将value设置为关系链计算成功的称谓。

而在这里需要考虑的问题是关系链从哪儿来,关系链即是点击不同的关系称谓按钮然后显示在文本域中的字符串,如果字符串太长如”爸爸的爸爸的妈妈的丈夫的兄弟的妹妹“,那么把它放到Map中的key中则太长了,而如果甚至更长那么更糟糕了。所以可以考虑用一个字母来表示一个关系称谓,即

  • 父——> f

  • 母——> m

  • 夫——> h

  • 妻——> w

  • 子——> s

  • 女——> d

  • 兄——> bb

  • 弟——> sb

  • 姐——> bs

  • 妹——> ss

  • 的——> ,

通过其单词简写大大缩短了关系链字符串的长度,而将的转换成逗号(,)。那么现在的“爸爸的爸爸的妈妈的妈妈的姐姐的妹妹”就变成了“f,f,m,m,bs,ss”,一个由英文字母组成的字符串。现在就可以将这个字符串保存在Map的key中,并且将其对应的关系链称谓保存在value中。

而当点击“计算”按钮后就可以通过由用户输入的关系链(“爸爸的爸爸的爸爸”)从Map中的key(="m,m,m")获得对应的value("曾祖父")。

那么多次点击按钮,如何为其添加“的”前缀呢?如果为每个按钮点击后都添加一个“的”前缀,那么第一次点击也会为其添加一个“的”前缀;但是如果多次点击按钮后,将关系链作为一个字符串进行处理(去除第一次点击后添加的“的”前缀),那么“回退”功能就会失去作用。

所以解决方法是设计一个计数器,统计称谓按钮的被点击次数,只要每被点击一次,计数器就加1。最开始计数器的值为0,即一次也没有点击过,但点击第一次后,计数器加1,同时关系链的字符串也没有“的”前缀,第二次点击后,对计数器的值进行判断,如果大于0,则加“的”前缀,并且计数器再次=1,以此累计。如果点击“清空”按钮后,显示关系链的文本域和计算结果的文本域将被清空,这里就将计数器归0,也即实现了这个项目的主要逻辑。

功能二:回退功能

Java实战之亲戚关系计算器(swing版)(2)——功能介绍

Java实战之亲戚关系计算器(swing版)(2)——功能介绍

回退到

Java实战之亲戚关系计算器(swing版)(2)——功能介绍

javax.swing.undo包提供了一系列接口和类,利用它可以方便的在程序中加入Undo/Redo功能。

而UndoMananger类则实现这种 undo/redo (撤销/恢复)机制,在很多程序中都有广泛应用。

本项目中的回退功能将用到undo包来实现。

功能三:清空功能

即将两个文本域的内容置为空即可。