【问题标题】:Deleting multiple rows from TableView从 TableView 中删除多行
【发布时间】:2017-03-04 02:37:15
【问题描述】:
@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

【问题讨论】:

    标签: javafx multipleselection


    【解决方案1】:

    问题是当表格中的项目列表发生变化时,所选项目列表可能会发生变化。因此,当您尝试迭代列表时,列表会被修改。

    您应该创建所选项目列表的副本并对其进行迭代:

    @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);
        }
    }
    

    (并将RemoveTransactionsCommandselectedItems的类型更改为List&lt;Transaction&gt;)。

    【讨论】:

    • 它帮助了:)。我对其进行了一些更改,并在负责添加/删除的类中创建了循环,但现在一切都很好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    相关资源
    最近更新 更多