gpt4 book ai didi

java - 我正在尝试在一个简单的银行系统上实现 'undo' JButton,它将撤消上次执行的操作

转载 作者:行者123 更新时间:2023-12-02 09:13:30 25 4
gpt4 key购买 nike

我正在运行其余的代码,但我不确定在 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 对象,其中包含诸如 amountsourceAcctdestinationAcct 或您想要的字段去做吧。关键是这个 Transaction 对象需要能够表示用户可能想要在程序中执行(或撤消)的所有操作。

此 Transaction 对象将用于进行正常的记账(从帐户中添加或删除资金),但在调整余额后,您将 Transaction 保存到您的 lastTransaction 字段或您的 transActions列表。

创建一个名为 undo 的方法并将其放入您的撤消处理程序中。当用户单击撤消按钮时,您的 undo 方法只会查看最近的事务并将其撤消。例如,如果交易是 100 美元的支票存款,当您撤消该交易时,您不会在支票中添加 100 美元,而是从支票中减去 100 美元。如果您正在处理交易列表,请确保在撤消交易后将其删除。

关于java - 我正在尝试在一个简单的银行系统上实现 'undo' JButton,它将撤消上次执行的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59205452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com