ItemEvent Auslöser unterscheiden

Beim Programmieren nach dem MVC-Prinzip empfiehlt es sich in Java eine eigene Controller-Klasse zu entwerfen, welche die Ereignisverarbeitung koordiniert. Der einfachste Weg wäre es, wenn man zu jedem GUI-Element jeweils eine eigene Beobachterklasse schreiben würde. Viel übersichtlicher ist es jedoch, wenn in nur einer Klasse bereits mehrere Ereignisse von verschiedenen Objekten behandelt werden können. Dazu muss man herausfinden, von welchem Objekt ein Ereignis ausgelöst wird.
 
Als Beispiel habe ich eine JComboBox namens bennyBox, welche vom ActionListener bennyBeobachter abonniert wird:

[…]
bennyBox.setActionCommand(„changed“);
bennyBox.addItemListener(bennyBeobachter);

Sobald sich etwas an der bennyBox tut, wird das dem bennyBeobachter gemeldet. Dabei wird das selbstgewählte Kommando „changed“ gesetzt, welches dem bennyBeobachter hilft, das eingetroffene Ereignis spezifisch der Quelle bennyBox zuzuordnen. Damit das ganze funktioniert, muss im bennyBeobachter das Objekt des Ereignisses in den Typ des Auslöseobjekts (im Beispiel JComboBox) gecastet werden. Danach kann man über die Methode getActionCommand() das gesetzte Kommando abrufen und zur Ereignisbehandlung einsetzen. Das sieht dann in etwa so aus:

    @Override
    // Implementierte Methode „itemStateChanged“ von „ItemListener“
    public void itemStateChanged(ItemEvent comboBoxEvent) {
        JComboBox triggeredBox = (JComboBox) comboBoxEvent.getItemSelectable();
        // Im String „kommando“ steht im Ereignisfall „changed“:
        String kommando = triggeredBox.getActionCommand();
        if(kommando == „changed“){
        // Ereignisbehandlung    
        }
    }