从 TableView 中删除多行
Deleting multiple rows from TableView
@FXML
private void handleDeleteAction(ActionEvent event) {
for (Transaction transaction : transactionsTable.getSelectionModel().getSelectedItems()) {
RemoveTransactionsCommand removeTransactionsCommand = new RemoveTransactionsCommand(transaction, transactionsTable.getSelectionModel().getSelectedItems(), data);
commandRegistry.executeCommand(removeTransactionsCommand);
}
}
为什么在我 select 超过一行的情况下它不起作用,我的意思是它删除一行(有时两行,但找不到决定它的原因)
命令实现如下:
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
问题是当 table 中的项目列表更改时,所选项目列表可能会更改。因此,当您尝试遍历列表时,列表会被修改。
您应该创建所选项目列表的副本并循环访问它:
@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);
}
}
(并将RemoveTransactionsCommand
中selectedItems
的类型改为List<Transaction>
)。
@FXML
private void handleDeleteAction(ActionEvent event) {
for (Transaction transaction : transactionsTable.getSelectionModel().getSelectedItems()) {
RemoveTransactionsCommand removeTransactionsCommand = new RemoveTransactionsCommand(transaction, transactionsTable.getSelectionModel().getSelectedItems(), data);
commandRegistry.executeCommand(removeTransactionsCommand);
}
}
为什么在我 select 超过一行的情况下它不起作用,我的意思是它删除一行(有时两行,但找不到决定它的原因)
命令实现如下:
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
问题是当 table 中的项目列表更改时,所选项目列表可能会更改。因此,当您尝试遍历列表时,列表会被修改。
您应该创建所选项目列表的副本并循环访问它:
@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);
}
}
(并将RemoveTransactionsCommand
中selectedItems
的类型改为List<Transaction>
)。