swing undo 操作的实现

本文探讨了在Java Swing框架中实现点餐界面撤销功能的方法。主要介绍了通过使用ArrayList记录每一项点餐详情并实现撤销功能的过程,同时讨论了如何通过查找换行符定位撤销位置及采用JFrame内置的UndoManager简化撤销操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

课程quiz里要求设计一个点餐的界面。需要一个按钮clear,实现撤销的功能。(比如说顾客不想要了,或者服务生错误输入需要撤回)

大致效果是这样

点击一次clear后,


具体的操作就是将JTextArea中的最后一行去掉。clear当然可以点击多次,所有很有些栈结构的味道。orderNow按钮则会清空整个Area(顾客已点完,setText("")即可实现).

undo操作的实现方式有这么几种

1. ArrayList 。ArrayList是栈结构在java中的呈现方式之一,可以在点餐的时候记录下每一个item,需要撤销时就撤销掉最后一个。这里Area中要利用substring来截取remaining的string,弃掉每次的最后一行。

2.寻找换行符。每行字符串末尾都有换行符,找到倒数第二个换行符的位置,确定index,再使用substring

3.我觉得最好能实现通用的Jframe undo操作。查询了一些博客和贴吧,讲得有些乱。于是直接查了java doc


可谓很清晰了。先在声明区声明一个全局的UndoManager

然后可以在构造函数里加入最后一句。这样UndoManager就能manage TextArea中的相关操作。当然,这些操作必须是undoable的。

最后在相应的事件响应函数里使用undoManager.undo()即可 ----即撤销了在TextArea中发生的最近一步操作

PS: redo大致类似

         不同的操作区域(比如重新声明了一个TextField)需要不同的UndoManager实例来管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值