From cb6d8a88f1f904edd6c904ac9469006241d54655 Mon Sep 17 00:00:00 2001 From: yushijinhun Date: Sat, 21 Jul 2018 12:31:08 +0800 Subject: [PATCH] Fix the old account isn't replaced when adding a same account --- HMCL/src/main/java/org/jackhuang/hmcl/ui/AddAccountPane.java | 5 +++-- .../java/org/jackhuang/hmcl/util/MappedObservableList.java | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AddAccountPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AddAccountPane.java index 1b66d1f4c..87d2111ed 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AddAccountPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AddAccountPane.java @@ -152,8 +152,9 @@ public class AddAccountPane extends StackPane { Accounts.getAccounts().add(account); } else { // adding an already-added account - // instead of discarding the new account, we replace the existing account with the new account - Accounts.getAccounts().set(oldIndex, account); + // instead of discarding the new account, we first remove the existing one then add the new one + Accounts.getAccounts().remove(oldIndex); + Accounts.getAccounts().add(oldIndex, account); } acceptPane.hideSpinner(); fireEvent(new DialogCloseEvent()); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/MappedObservableList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/MappedObservableList.java index da7684e5b..21ab225eb 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/MappedObservableList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/MappedObservableList.java @@ -22,7 +22,7 @@ import static javafx.collections.FXCollections.unmodifiableObservableList; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; +import java.util.IdentityHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -75,7 +75,7 @@ public final class MappedObservableList { @Override public void onChanged(Change change) { // cache removed elements to reduce calls to mapper - Map> cache = new HashMap<>(); + Map> cache = new IdentityHashMap<>(); while (change.next()) { int from = change.getFrom();