如何阻止Actionlistener重复先前的操作

时间:2019-05-21 05:23:01

标签: java

我对Java和编码一般来说是新手。我正在尝试更新信息,但每次更新不止一次,它就会重复以前的更新,例如如果更新了帐户3,然后又更新了帐户4,则它将正常更新4,将3更新为空白。我该如何做,使其仅更新我想要的内容?

$a = get-content C:\a.txt
$b = get-content C:\b.txt

If($a[0] -ne $b[0]) { 
    "Line number 1:Hello is not matching" | Out-Host
}
If($a[1] -ne $b[1]) { 
    "Line number 2:World is not matching" | Out-Host
}
If($a[2] -ne $b[2]) { 
    "Line number 3:Environment is not matching" | Out-Host
}
If($a[3] -ne $b[3]) { 
    "Line number 4:Available is not matching" | Out-Host
}

1 个答案:

答案 0 :(得分:1)

欢迎来到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);

那么您就不需要ifelse if语句(通常这是不良设计的标志)。