Wie bereits in actionPerformed müssen wir uns zunächst eine Referenz auf das item holen, das die Statusänderung ausgelöst hat. Da wir nicht wissen, von welchem Typ dieses item ist (bei uns kommt Checkbox oder Choice in Frage), müssen wir ein allgemeines Objekt verwenden. Mit Hilfe der Methode getItemSelectable() des Events können wir das in einer Objektvariable speichern. Allerdings müssen wir dazu ein Typecasting auf Object vornehmen, da getItemSelectable() jeweils ein Objekt vom Itemtyp zurückliefert. Daher sieht das ganze dann so aus:
Object item = (Object)event.getItemSelectable();
Nun können wir mit Hilfe der gewohnten if-Abfragen überprüfen, welches item der Auslöser war:
if (item == chFarbe) { } if (item == cbFüllung) { }
Nun müssen wir allerdings unterschiedlich vorgehen. Wenn unser item eine Choicebox ist, dann müssen wir den Index bestimmen, der ausgewählt wurde (die entsprechende Methode ist eine Choice-Methode!), während wir im Falle einer Checkbox einen boolean-Wert ermitteln müssen, mit einer Methode, die eine Checkbox-Methode ist.
Demonstrieren wir es zunächst einmal wieder an der Checkbox:
if (item == cbFüllung) { Checkbox checkbox = (Checkbox)item; boolean Füllung = checkbox.getState(); cvZeichnung.setFüllung(Füllung); }
Zunächst wird per Typecasting das (unbestimmte) Object item in eins der Klasse Checkbox names checkbox überführt. Dann wird mit der Methode getState() dieses Checkbox-Objekts ermittelt, wie der boolean-Wert jetzt ist. Dieser Wert wird in der boolean-Variable Füllung zwischengespeichert, die dann an die set-Methode des Canvas übergeben wird.
Analog funktioniert das mit der Choicebox. Nur muss hier einerseits die Variable vom Typ int sein und außerdem muss die Methode getSelectedIndex() der Klasse Choice aufgerufen werden:
if (item == chFarbe) { Choice choice = (Choice)item; int index = choice.getSelectedIndex(); cvZeichnung.setZeichenfarbe(index); }
Damit sollte jetzt auch die Hauptklasse funktionieren und die Version 3 fertig sein.
© Ralph-Erich Hildebrandt, 26. April 2004