Ok, donc pour chaque projet, tu voudrais une et une seule instance de MainTabbedPaneUI. Premièrement, il te faut un moyen d'identifier de manière unique un projet. Mettons qu'on ait une classe qui désigne cet identifiant unique (mais ça peut être n'importe quel classe immutable, Integer, String, File, URL...) qui s'appelle ProjectId. Ça peut être également la classe qui gère le Projet lui-même). L'important que c'est les méthodes equals() et hashCode() soient correctement codées (conformes à leur javadoc et vérifiant l'égalité de 2 identifiants).
Il te suffit d'utiliser une map, pour associer un id et un MainTabbedPaneUI : lors de l'ouverture d'un projet, s'il y a déjà un MainTabbedPaneUI associé à l'id du projet, tu utilises celui-là, sinon tu en crées un nouveau et tu le mets danas la map. A la fermeture du MainTabbedPaneUI, il faudra l'enlever de la map.
Exemple :
private static final Map<ProjetID, MainTabbedPaneUI > uis = new HashMap<>();
1 2 3 4 5 6 7 8 9 10
| public final MainTabbedPaneUI open(ProjectId projectId) {
return uis.computeIfAbsent(projectId, id-> createMainTabbedPaneUI(id));
}
public final void close(ProjectId projectId) {
uis.computeIfPresent(projectId, (id,ui)-> {
closeMainTabbedPaneUI(ui);
uis.remove(id);
});
} |
Pour les méthodes createMainTabbedPaneUI et closeMainTabbedPaneUI, fais comme tu fais déjà, ça ne change pas.
Partager