JAVA ActionEvent - jak pogodzić dwie akcje ?

0

Mam dość złożony problem.
Mam dwa ComboBoxy, gdzie jeden jest zależny od drugiego (zmieniając wartość w pierwszym, zmieniają się wartości drugiego).

  1. combobox to lista pionków, które posiadam (nr indeksów tablicy stringów).
  2. ComboBox to lista pól, na których może postawić mój wybrany w 1. comboBoxie pionek.
    No i mam button, który wykonuje ruch w mojej grze (przestawia wybrany pionek w wyznaczone miejsce).
    Problem pojawia się po 1. ruchu. Program się crashuje...
    Wiem w czym problem, ale nie wiem jak go rozwiązać :/
    Dzieje się tak dlatego, że po każdym ruchu, komendą removeAllItems() kasuję elementy 1. Comboboxa, a następnie szukam ich na nowo ( znajdzPionki() ), po to by z listy usunąć index z którego przestawiłem pionek do innego.

Jednocześnie w ActionEvencie mam akcje do tego ComboBoxa (pionki). Metoda poleRuchu() kasuje przy każdej zamianie w 1. Comboboxie stare pole i szuka odpowiednich dla tej pozycji.

public void actionPerformed(ActionEvent event) {
        Object akcja = event.getSource();

        if(akcja == bRuch)
        {
            String pozycja =  pionki.getSelectedItem().toString();
            int i = (int)(pozycja.charAt(1)-49);
            int j = (int)(pozycja.charAt(4)-49);
            String pozycja2 =  dobrePola.getSelectedItem().toString();
            int ii = (int)(pozycja2.charAt(1)-49);
            int jj = (int)(pozycja2.charAt(4)-49);
            plansza[i][j] = pustePola;
            plansza[ii][jj] = pionkiGracza;
            pokazPlansze();
            znajdzPionki();
            poleRuchu();
        }
        else if(akcja==pionki)
        {
            poleRuchu();
        }
            
        
    }

Komunikat błędu:

    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

Co zrobić by pogodzić tą sytuację ?

0

Gdy poprawiłem na coś takiego to działa, tylko czy to dobre rozwiązanie takie dodawanie i kasowania ActionListenera :/ ?

    public void actionPerformed(ActionEvent event) {
        Object akcja = event.getSource();

        if(akcja == bRuch)
        {
            String pozycja =  pionki.getSelectedItem().toString();
            int i = (int)(pozycja.charAt(1)-49);
            int j = (int)(pozycja.charAt(4)-49);
            String pozycja2 =  dobrePola.getSelectedItem().toString();
            int ii = (int)(pozycja2.charAt(1)-49);
            int jj = (int)(pozycja2.charAt(4)-49);
            plansza[i][j] = pustePola;
            plansza[ii][jj] = pionkiGracza;
            pokazPlansze();
            pionki.removeActionListener(this);
            znajdzPionki();
            pionki.addActionListener(this);
            poleRuchu();
        }
        else if(akcja==pionki)
        {
            poleRuchu();
        }
            
        
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1