- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行其余的代码,但我不确定在 ActionListener 中为撤消按钮做什么。我只有这个 Action 监听器
private class UndoButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e) {
}
我将在下面发布 GUI 类的其余部分以供引用,因为这不是作业(它是,只是不在 GUI 中),我感谢任何人可以给我的任何建议。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.DecimalFormat;
public class BankGUI extends JFrame {
private JLabel checking;
private JLabel saving;
private JButton depChecking;
private JButton depSaving;
private JButton witChecking;
private JButton withSaving;
private JButton transferToSaving;
private JButton transferToChecking;
private JButton undo;
private JTextField checkingAmt;
private JTextField savingAmt;
private JTextField depositChk;
private JTextField depositSav;
private JTextField withChk;
private JTextField withSav;
private JTextField transChk;
private JTextField transSav;
public BankGUI() {
super( "Bank Application" );
setLayout(new FlowLayout() );
checkingAmt = new JTextField(10);
checkingAmt.setEditable(false);
checkingAmt.setText("500.00");
add( checkingAmt );
savingAmt = new JTextField(10);
savingAmt.setEditable(false);
savingAmt.setText("0.00");
add(savingAmt);
checking = new JLabel( " Checking ");
add(checking);
saving = new JLabel( " Saving " );
add(saving);
depChecking = new JButton( " Deposit " );
add(depChecking);
depChecking.addActionListener(new DepChkButtonHandler());
depSaving = new JButton( " Deposit " );
add(depSaving);
depSaving.addActionListener(new DepSavButtonHandler());
depositChk = new JTextField(10);
depositChk.setEditable(true);
add(depositChk);
depositSav = new JTextField(10);
depositSav.setEditable(true);
add(depositSav);
witChecking = new JButton( " Withdraw " );
add(witChecking);
witChecking.addActionListener(new WitChkButtonHandler());
withSaving = new JButton( " Withdraw " );
add(withSaving);
withSaving.addActionListener(new WithSavButtonHandler());
withChk = new JTextField(10);
withChk.setEditable(true);
add(withChk);
withSav = new JTextField(10);
withSav.setEditable(true);
add(withSav);
transferToSaving = new JButton( " Transfer " );
add(transferToSaving);
transferToSaving.addActionListener(new TranstoSavButtonHandler());
transferToChecking = new JButton( " Transfer " );
add(transferToChecking);
transferToChecking.addActionListener(new TranstoChkButtonHandler());
transSav = new JTextField(10);
transSav.setEditable(true);
add(transSav);
transChk = new JTextField(10);
transChk.setEditable(true);
add(transChk);
undo = new JButton( " Undo " );
add(undo);
}
private class DepChkButtonHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent arg0) {
DecimalFormat deciFormat = new DecimalFormat();
deciFormat.setMaximumFractionDigits(2);
double depAmt = Double.parseDouble(depositChk.getText());
double chkAmt = Double.parseDouble(checkingAmt.getText());
String newAmt = deciFormat.format(depAmt + chkAmt);
checkingAmt.setText(newAmt);
}
}
private class DepSavButtonHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
DecimalFormat deciFormat = new DecimalFormat();
deciFormat.setMaximumFractionDigits(2);
double depAmt = Double.parseDouble(depositSav.getText());
double savAmt = Double.parseDouble(savingAmt.getText());
String newAmt = deciFormat.format(depAmt + savAmt);
savingAmt.setText(newAmt);
}
}
private class WitChkButtonHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent arg0) {
DecimalFormat deciFormat = new DecimalFormat();
deciFormat.setMaximumFractionDigits(2);
double witAmt = Double.parseDouble(withChk.getText());
double chkAmt = Double.parseDouble(checkingAmt.getText());
String newAmt = deciFormat.format(chkAmt - witAmt);
checkingAmt.setText(newAmt);
}
}
private class WithSavButtonHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
DecimalFormat deciFormat = new DecimalFormat();
deciFormat.setMaximumFractionDigits(2);
double witAmt = Double.parseDouble(withSav.getText());
double savAmt = Double.parseDouble(savingAmt.getText());
String newAmt = deciFormat.format(savAmt - witAmt);
savingAmt.setText(newAmt);
}
}
private class TranstoSavButtonHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
DecimalFormat deciFormat = new DecimalFormat();
deciFormat.setMaximumFractionDigits(2);
double transAmt = Double.parseDouble(transSav.getText());
double savAmt = Double.parseDouble(savingAmt.getText());
double chkAmt = Double.parseDouble(checkingAmt.getText());
String newAmt1 = deciFormat.format(savAmt + transAmt);
String newAmt2 = deciFormat.format(chkAmt - transAmt);
savingAmt.setText(newAmt1);
checkingAmt.setText(newAmt2);
}
}
private class TranstoChkButtonHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
DecimalFormat deciFormat = new DecimalFormat();
deciFormat.setMaximumFractionDigits(2);
double transAmt = Double.parseDouble(transChk.getText());
double savAmt = Double.parseDouble(savingAmt.getText());
double chkAmt = Double.parseDouble(checkingAmt.getText());
String newAmt1 = deciFormat.format(savAmt - transAmt);
String newAmt2 = deciFormat.format(chkAmt + transAmt);
savingAmt.setText(newAmt1);
checkingAmt.setText(newAmt2);
}
}
private class UndoButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e) {
}
}
}
最佳答案
您需要决定撤消的深度。用户可以撤消最近 10 次操作,还是仅撤消最近一次操作?此决定将决定您是将最后一个操作存储为简单字段,还是存储为某种List
事务(某种Queue
也可以)。
您还应该将您的交易标准化为某种模型,该模型可以反射(reflect)您的应用程序支持的每种交易的详细信息。换句话说,您需要一个 Transaction
对象,其中包含诸如 amount
、sourceAcct
、destinationAcct
或您想要的字段去做吧。关键是这个 Transaction 对象需要能够表示用户可能想要在程序中执行(或撤消)的所有操作。
此 Transaction 对象将用于进行正常的记账(从帐户中添加或删除资金),但在调整余额后,您将 Transaction 保存到您的 lastTransaction
字段或您的 transActions
列表。
创建一个名为 undo
的方法并将其放入您的撤消处理程序中。当用户单击撤消按钮时,您的 undo
方法只会查看最近的事务并将其撤消。例如,如果交易是 100 美元的支票存款,当您撤消该交易时,您不会在支票中添加 100 美元,而是从支票中减去 100 美元。如果您正在处理交易列表,请确保在撤消交易后将其删除。
关于java - 我正在尝试在一个简单的银行系统上实现 'undo' JButton,它将撤消上次执行的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59205452/
为了重置我的最后一次提交,我这样做了: git reset --soft HEAD^ 但是我做了太多次了。现在我想往回走几步。这可能吗? 另外,我有一个开发人员在一个生产应用程序上提取和 merge
在 Vim 中,我做了太多撤消操作。我如何撤消此操作(即重做)? 最佳答案 Ctrl+r 关于vim - 如何在 Vim 中重做(即 "undo undo")?,我们在Stack Overflow上找
在过去的 3 周里,我一直在尝试能够以编程方式调用撤消命令。我最近的尝试涉及从 C# 调用 LISP 代码。现在我的 C# 方法看起来像这样 [CommandMethod("TestLispFromC
如何使用 ctrl+z (ApplicationCommand.Undo) 键来实现我们自己的撤消方法,而不是使用 WPF 中的默认命令。基本上用我们自己的撤消方法替换默认命令。 例如:我想将 ctr
在 Word 窗口中,执行诸如键入、格式化字体、段落...以确保撤消列表不为空,然后通过单击功能区上的任何样式来更改某些文本的样式。撤消列表中会出现一个名为“应用快速样式”的条目。然后运行宏,如: S
我有一个在“Worksheet_SelectionChange” 事件上触发的宏。宏验证一列的数据,如果错误则更改单元格的背景颜色。 问题是运行宏后,它会清除所有文档的更改历史记录(Ctrl Z),甚
有什么方法可以撤销 Mikephil 图表上的选择?当我在条形图中选择一个值时,我有一个应用程序会打开一个 Activity 。这很好用,但是,当我返回到包含图表的 Activity 时,选择仍然存在
完成此任务的最佳做法是什么: 我有提交: A -- B -- C 提交 B 包括: file1.java file2.java icon.png 我想撤消对 file1 和 file2 的更改,但不想
我刚刚用 git branch -D branchName 进行了一些我需要的实验性更改删除了错误的分支。 如何恢复分支? 最佳答案 您可以使用 git reflog找到分支最后一次提交的 SHA1。
所以我正在使用 CodeMirror,我想要一种方法来从 undo 状态中省略某些编辑。特别是,我遇到了一种情况,我想要一次击键 替换部分镜像文本并 自动缩进新区域 天真地这样做意味着使用击键,然后点
我正在编写指令,它将像这样: 允许编辑一些文本(使用内容可编辑) 在失去焦点时,它应该将其值保存到模型(最近观看并保存到 DB) 应该有按钮“撤消”可以恢复更改。 我的实现是:http://plnkr
我听说纯函数式数据结构的好处之一是您可以免费获得撤消/重做操作。有人可以解释为什么吗?我不明白为什么在函数式语言中添加撤消/重做更容易。 例如,假设我有以下队列实现: data Queue a = Q
我有一个内置于 iPhone 核心数据中的数据模型。我还有一个适用于该模型的 NSUndoManager 。问题是,我不想在撤消过程中影响实体上的某些属性,而我确实希望回滚其他属性。在不彻底改变事情的
令我惊讶的是,我找不到有关该主题的任何信息,但是搜索此类内容总是会产生很多相似但不相关的内容... 无论如何,一些注意事项以避免误解:- 问题与 HTML、HTTP、Javascript 和浏览器行为
这个问题已经有答案了: 已关闭13 年前。 Possible Duplicate: Design Pattern for Undo Engine 一般来说,您如何处理在应用程序中支持“撤消”功能?我曾
我一直在问很多有关事件溯源的问题,因此对此表示歉意,但我想从一开始就解决这个问题。 设置 | p_key | invoice_id | EmployeeId | Event type |
我从主分支在 Visual Studio 中做了一些代码更改,并试图在 TortoiseHG 的新分支中提交更改,但显然我不小心将更正提交到主分支。我没有将更改推送到远程存储库,但如果我尝试对更改执行
有没有办法在单击后退按钮时“撤消”由 jQuery 执行的函数?例如,我要执行的函数名为 doSomething: function doSomething(button) { ...cli
假设我有这个迁移: class MigrateStuff false add_index :contacts, :receive_newsletter for t in SomeOt
现状 我有一个使用 MVVM 和 NHibernate 的 WPF 应用程序。我有一个包含所有客户的列表框的主/详细信息窗口,列表框的 selectedItem 是用于在详细信息屏幕中显示客户详细信息
我是一名优秀的程序员,十分优秀!