Java 如何阻止actionlistener重复以前的操作
我对java和一般的编码非常陌生。我正在尝试更新信息,但每次我更新一次以上,它都会重复上一次更新,例如,如果帐户3更新,帐户4更新之后,它会正常更新4,而3则为空白。如何使它只更新我想要的内容Java 如何阻止actionlistener重复以前的操作,java,Java,我对java和一般的编码非常陌生。我正在尝试更新信息,但每次我更新一次以上,它都会重复上一次更新,例如,如果帐户3更新,帐户4更新之后,它会正常更新4,而3则为空白。如何使它只更新我想要的内容 updateBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { menuScreen.setVisible(false);
updateBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
menuScreen.setVisible(false);
updateScreen.setVisible(true);
String id = JOptionPane.showInputDialog("Membership to update (1-4)");
if (id.equals("1")) {
tf_updateDOB.setText(account1.getAccountDOB());
tf_updatePlan.setText(account1.getAccountPlan());
tf_updateCard.setText(account1.getAccountCard());
tf_updateName.setText(account1.getAccountName());
updateSubmitBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
account1.setAccountDOB(tf_updateDOB.getText());
account1.setAccountCard(tf_updateCard.getText());
account1.setAccountPlan(tf_updatePlan.getText());
account1.setAccountName(tf_updateName.getText());
menuScreen.setVisible(true);
updateScreen.setVisible(false);
}
});
} else if (id.equals("2")) {
tf_updateDOB.setText(account2.getAccountDOB());
tf_updatePlan.setText(account2.getAccountPlan());
tf_updateCard.setText(account2.getAccountCard());
tf_updateName.setText(account2.getAccountName());
updateSubmitBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent f) {
account2.setAccountDOB(tf_updateDOB.getText());
account2.setAccountCard(tf_updateCard.getText());
account2.setAccountPlan(tf_updatePlan.getText());
account2.setAccountName(tf_updateName.getText());
menuScreen.setVisible(true);
updateScreen.setVisible(false);
}
});
}
欢迎来到SO。我怀疑您的问题在于您使用的是
addActionListener
,因此每次运行代码时都会添加另一个侦听器。单击该按钮时,您之前添加的所有组件也会运行
最好是添加一个引用上次选择的帐户的侦听器:
private class AccountUpdater implements ActionListener {
private Account account;
public void setAccount(Account account) {
this.account = account;
tf_updateDOB.setText(account.getAccountDOB());
tf_updatePlan.setText(account.getAccountPlan());
tf_updateCard.setText(account.getAccountCard());
tf_updateName.setText(account.getAccountName());
}
@Override
public void actionPerformed(ActionEvent f) {
account.setAccountDOB(tf_updateDOB.getText());
account.setAccountCard(tf_updateCard.getText());
account.setAccountPlan(tf_updatePlan.getText());
account.setAccountName(tf_updateName.getText());
menuScreen.setVisible(true);
updateScreen.setVisible(false);
}
}
AccountUpdater updater = new AccountUpdater();
updateSubmitBtn.addActionListener(updater);
然后在选项对话框后面的代码中,您只需执行以下操作:
if (id.equals("1")) {
updater.setAccount(account1);
} else if (id.equals("2")) {
updater.setAccount(account2);
} ...
这也将使您的代码更容易阅读,重复更少
如果帐户具有id字段,则更好:
List<Account> accounts = ...;
accounts.stream()
.filter(ac -> ac.getId().equals(id))
.findAny().ifPresent(updater::setAccount);
列出帐户=。。。;
accounts.stream()
.filter(ac->ac.getId().equals(id))
.findAny().ifPresent(updater::setAccount);
然后您就不需要if
,else-if
语句(这通常是设计不佳的标志)