@FXML
private void handleDeleteAction(ActionEvent event) {
for (Transaction transaction : transactionsTable.getSelectionModel().getSelectedItems()) {
RemoveTransactionsCommand removeTransactionsCommand = new RemoveTransactionsCommand(transaction, transactionsTable.getSelectionModel().getSelectedItems(), data);
commandRegistry.executeCommand(removeTransactionsCommand);
}
}
为什么在我选择多行的情况下它不起作用,我的意思是删除一行(有时两行,但无法找到决定它的行)
这是命令实现:
public class RemoveTransactionsCommand implements Command {
private ObservableList<Transaction> selectedItems;
private Transaction transactionToRemove;
private Account account;
public RemoveTransactionsCommand(Transaction transactionToRemove, ObservableList<Transaction> selectedItems, Account account) {
this.account = account;
this.transactionToRemove = transactionToRemove;
this.selectedItems = selectedItems;
}
@Override
public String getName() {
int presentSize = selectedItems.size();
return presentSize + "transaction/s removed";
}
@Override
public void execute() {
account.removeTransaction(transactionToRemove);
}
}
删除命令:
public void removeTransaction(Transaction transaction) {
this.transactions.remove(transaction);
}
另外我想知道实际删除操作的大小,但我作为第二个参数传递的内容不是静态的,例如当每行被删除时它将为0.
有任何建议如何改进吗? 完整项目可以找到here
答案 0 :(得分:3)
问题是当表格中的项目列表发生变化时,所选项目列表可能会发生变化。因此,当您尝试迭代列表时,列表会被修改。
您应该创建所选项目列表的副本,然后通过它进行迭代:
@FXML
private void handleDeleteAction(ActionEvent event) {
List<Transaction> selectedTransactions = new ArrayList<>(transactionTable.getSelectionModel().getSelectedItems());
for (Transaction transaction : selectedTransactions) {
RemoveTransactionsCommand removeTransactionsCommand = new RemoveTransactionsCommand(transaction, selectedTransactions, data);
commandRegistry.executeCommand(removeTransactionsCommand);
}
}
(并将selectedItems
中的RemoveTransactionsCommand
类型更改为List<Transaction>
)。