Buttons aus Arrayliste erstellt wie komm ich nun wieder an das Oobjekt aus der arrayliste ran

lizzy89

Neues Mitglied
Hallo zusammen!
Ich bin absoluter Java-Einstieger und habe folgendes Problem(Ich arbeite mit den SWT-Klassen):
Es geht um ein Bestellsystem in einer Bar.
Die Buttons sollen aus der Arrayliste <getraenkeliste> erstellt werden.Wird nun Beispielsweise der Button "Cola"(=k.getbezeichnung) gedrückt soll im SelectionAdapter nun das Objekt k(je nachdem welcher button eben gedrückt wurde) aus der Klasse Getraenk der Arrayliste<bestellliste> hinzugefüegt bzw v.a auf das k ,das durch den Button dargestellt wird zugegriffen werden können.OKay hm ich hoff mans verstehts vlt anhand des Quelltextes besser:

Java:
for (Getraenk k : getraenkeliste) {
			
			Button getraenkeAuswahl = new Button(buttonGroup, SWT.PUSH); 
			getraenkeAuswahl.setText(""+k.getbezeichnung());                                               
			getraenkeAuswahl.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false,
					8, 1));
			getraenkeAuswahl.addSelectionListener(new BestellAdapter(this));


public class BestellAdapter extends SelectionAdapter {
	private Bestellfenster bf;
	
	public BestellAdapter()
	}


	public void widgetSelected(SelectionEvent arg0) {
		bestellliste.add(getraenkeAuswahl.get????)
	}

}




Ich hoff es kann mir jmd etwas weiterhelfen.Falls nötig kann ich natürlich noch den restlichen quellcode beifügen.
liebe grüße larissa
 
Du müsstest erstmal durch das Event eine Referenz auf den auslösenden Button bekommen (ich hoffe mal, dass das geht, bin da leider auch nicht der experte), sobald du die Referenz auf den Button hast, nennen wir sie mal bt, kannst du dann folgendes machen:
Java:
for (Getraenk k : getraenkeliste) 
{ 
   if(bt.getText().equals(k.getbezeichnung()))
   {
      bestellliste.add(k);
   }
}

Ich hoffe, dass hilft dir weiter.

Edit:
Ansonsten wäre es hier auch gut einen assoziativen Speicher (z.B. HashMap) zu benutzen, das funktioniert ähnlich wie ein array, nur, dass du statt zahlen als index Strings verwenden kannst, so kannst du den Bezeichnungen je ein konkretes Objekt zuweisen.
 
Zuletzt bearbeitet:
Ich hab mich auch aus eigenem Interesse ein wenig eingelesen in das Thema mit den Listenern, hab das noch nicht getestet, aber ich denke das sollte dann sogehen, du holst also erstmal den Auslöser und castest ihn dann wieder in einen Button und dann wendest du das an, was ich im Post darüber geschrieben hatte:
Java:
    public void widgetSelected(SelectionEvent arg0) 
    {
        //bin mir nicht hunderprozent sicher, ob die nächste Zeile genau so funktioniert
        Button source = (Button) arg0.getSource();
        for (Getraenk k : getraenkeliste) 
        { 
            /*Strings nicht mit == vergleichen, weil sonst nur die Adresse verglichen wird, sondern mit equals, dann wird der Inhalt verglichen, gilt für alle Objekte*/
            if(source.getText().equals(k.getbezeichnung()))
            {
               bestellliste.add(k);
            }
        }
    }
 
Ich würde mit dem Index und dem ActionCommand arbeiten.

Dazu beim Initalisieren der Buttons folgende Zeile einfügen:
Java:
getraenkeAuswahl.setActionCommand(""+getraenkeliste.indexOf(k)) //Setzt den Index des Getränkes als 
                                                        //ActionCommand, ""+ weil es ein String sein muss
und im Listener folgendes machen:
Java:
 public void widgetSelected(SelectionEvent arg0) {
        bestellliste.add(getraenkeliste.get(Integer.parseInt(arg0.getActionCommand)));//Integer.parseInt parst
// den String wieder zu einer Zahl zurück. ACHTUNG: Das wirft dir eine Exception, falls da was anderes als Ziffern drin stehen!
    }
PS: Ich würd das SelectionEvent nicht arg0 sondern e oder se nennen ;-) (klingt imho besser)
Hoffe, konnte dir helfen.
 

Zurück
Oben