JTabbedPane - karta z odnośnikiem do przycisku zamknięcia

Chcę zbudować interfejs z kartami w JAVA, z przyciskiem zamykania na każdej karcie. Do tego użyłem następującej klasy:ButtonTabComponent

Mam przycisk na moim GUI, który tworzy nową kartę. Powiedzmy, że wciskam przycisk Nowa karta 4 razy, dlatego tworzone są 4 karty:

| tab 0 | karta 1 | tab 2 | tab 3 | (każda karta zawiera przycisk zamykania)

Teraz zdecydowałem, że chcę zamknąć kartę 1 i pojawia się problem, gdy zamykam środkową kartę, wszystkie indeksy są porządkowane - co oznacza, że:

| tab 0 | tab 2 | tab 3 | (zakładka 2 będzie miała indeks 1)

Jeśli spróbuję teraz utworzyć nową kartę, karta zostanie utworzona, ale nowa karta:

| tab 0 | tab 2 | tab 3 | karta 1 | (karta 1 nie ma przycisku zamykania)

Jeśli kliknę ponownie Nowa karta, otrzymam:

| tab 0 | tab 2 | tab 3 | karta 1 | zakładka 4 | (karta 4 jest w porządku, ma przycisk zamykania)

Teraz decyduję się zamknąć kartę 2 i otrzymuję:

| tab 0 | tab 3 | karta 1 | zakładka 4 | (zakładka 3 będzie teraz miała indeks 1)

Jeśli utworzę nową kartę:

| tab 0 | tab 3 | karta 1 | zakładka 4 | karta 1 | (ostatnia karta ponownie nie ma przycisku zamykania).

Uważam, że jest to spowodowane przez indeks i przeczytałem podobne pytanie, tutaj na stackoverflow:stackoverflow.com/questions/15312252/jtabbedpane-arrayindexoutofboundsexception że możliwym rozwiązaniem byłoby:

Przekaż słuchaczowi odwołanie do elementu karty, a nie jego indeksu na panelu z zakładkami.

Nie wiem, jak to zrobić. Jeśli ktoś ma jakąkolwiek wskazówkę, naprawdę bym to docenił. Muszę mieć stałe odniesienie dla każdej karty, ponieważ każda karta otworzy plik i będzie miała możliwość zapisania do pliku i oczywiście indeks kart nie jest wiarygodny.

EDYCJA: Sposób dodawania nowej karty w moim kodzie to:

...//main class
private final JTabbedPane pane = new JTabbedPane();
//I am using an array to store the tabs created
//I initialize the array with false. the idea was that when a new tab get created, one item in the array
//gets the true value. when the tab is closed, the array item (based on the index) is set back to false
arrTabList = new boolean[10];
        for(int i=0; i<10; i++){
            arrTabList[i] = false;
        }

...


public void newFile()  //this function opens a new tab
{
//parse the array to check the first item with false status
    for(int i=0; i<10; i++){
        if(!arrTabList[i]) {
            System.out.println("false");
            PanelCounter = i;
            break;
            }
    }
    newTab t = new newTab();   //object which contains the tab content (a bunch of graphical components, input fields mostly)
    pane.add("New Entry" + PanelCounter, t.createContentPane());   //adds the new tab to the main window
    pane.setTabComponentAt(PanelCounter, new ButtonTabComponent(pane, this));
    arrTabList[PanelCounter] = true;  //sets the item array to true
}

//when a tab is closed, this function is called in the listener:
public void decreaseCounter(int i)
{
        arrTabList[i] = false;  //sets the item array back to false
}

questionAnswers(3)

yourAnswerToTheQuestion