功能一:计算亲属关系称谓
比如说:爸爸的爸爸的爸爸是曾祖父,在上面的文本域中显示关系链,而在下面的文本域中显示称谓,这就是计算亲属关系称谓的功能。
点击”父“按钮,在最上面的文本域中出现”爸爸“,当再次点击”父“按钮的时候,在刚才的“爸爸”后面“添加”的爸爸“,如此再点击其他按钮都在其后面添加”的爸爸“或者其他关系称谓。
但是必须注意的是,当第一次点击任意关系称谓按钮的时候,不能添加”的“前缀。
实现思路解析:“计算”按钮的实现思路是利用一个二维数组的X索引和Y索引确定具体的项。
那么多次点击按钮,如何为其添加“的”前缀呢?如果为每个按钮点击后都添加一个“的”前缀,那么第一次点击也会为其添加一个“的”前缀;但是如果多次点击按钮后,将关系链作为一个字符串进行处理(去除第一次点击后添加的“的”前缀),那么“回退”功能就会失去作用。
所以解决方法是设计一个计数器,统计称谓按钮的被点击次数,只要每被点击一次,计数器就加1。最开始计数器的值为0,即一次也没有点击过,但点击第一次后,计数器加1,同时关系链的字符串也没有“的”前缀,第二次点击后,对计数器的值进行判断,如果大于0,则加“的”前缀,并且计数器再次=1,以此累计。如果点击“清空”按钮后,显示关系链的文本域和计算结果的文本域将被清空,这里就将计数器归0,也即实现了这个项目的主要逻辑。
功能二:回退功能
这次不少利用的swing的类,而是使用了一个容器类Stack。
Stack是栈,特点是:先进后出。
它通过5个操作对类vector进行扩展,允许将向量视为堆栈。它提供了通常的 push
和 pop
操作,以及取栈顶点的 peek
方法、测试堆栈是否为空的 empty
方法、在堆栈中查找项并确定到栈顶距离的 search
方法。
就可以利用它的这个特点自己来写一个关于回退和恢复的功能,当点击一次称谓按钮,就把相关关系插入到栈Stack中,由于先进后出的特点,“回退”就是取出最后进入的哪一个,然后显示取出后还存在栈的关系链即可,如果是恢复的话就把取出的又放回栈即可。
功能三:清空功能
即将两个文本域的内容置为空即可。