Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo ich sitze jetzt schon eine Weile und weiß nicht weiter.
Mit was für Listener kann ich den Wert holden , der sich beim hoch und runterdrücken ändert.
Weiterhin habe ich 8 JSpinner ,
kann ich alle mit einmal die Bedingung verpassen, dass sie nicht unter 0 gehen dürfen.
Ein weiteres Problem wäre ich müsste von jeden JSpinner den Wert holen und den brauch ich zum multiplizieren.
Muss ich dann jeden einzelnden ein Listener geben und das lokal in jeden Listener einer statischen int variable zuweisen , oder gibt es schönere wege ?
Du kannst einen ChangeListener an deine Spinner hängen. Kann auch für alle Spinner der gleiche sein, denn im ChangeEvent-Objekt hängt dein jeweiliger Spinner als Quelle (
Code:
getSource()
).
Weiterhin kannst du über das SpinnerModel den Wert einschränken:
Java:
JSpinner mySpinner = new JSpinner(new SpinnerNumberModel(value, min, max, step));
Ja, danke.
@eraa , ich kenne diese ganzen Seiten, doch habe ich immer ein Objekt , wie in meinem Falle auch :
Java:
/**
* Einkauflsite erstellen
*/
public void partyOrganize() {
Cocktail co;
/* Aktuellen Cocktail aus der Combobox holen*/
String c = (String) jC_party0.getSelectedItem();
System.out.println(c);
/* alle CocktailObjekte aus der Liste holen*/
for (int i = 0; i < cl.sizeCocktails(); i++) {
co = cl.getCocktail(i);
/* Wenn der Objektname des Cocktail gleich dem namen des Strings
* in der ComboBox ist*/
if (co.getName().equals(c)) {
for (int j = 0; j < co.getBestandteile().size(); j++) {
Bestandteil bestand = co.getBestandteil(i);
// von jedem Cocktailbestandteil die Menge * dem Wert im Spinner erhöhen
int count = bestand.getMenge() * (Integer) jSpinner1.getModel().getValue();
// Von dem Bestandteil neuen Bestand setzen
bestand.setMenge(count);
partyShoppingList(co);
}
} // if vorbei
}
}
/* Wird ausgelöst, wenn man auf dem Button 'Einkaufsliste generieren' drückt.*/
public void partyShoppingList(Cocktail co){
/* Geänderte Daten in der Einkaufsliste anzeigen:*/
/* Dazu Model verwenden:*/
DefaultListModel model= new DefaultListModel();
/* temporäres Cocktail*/
Cocktail c = co;
for (int i = 0; i < c.getBestandteile().size(); i++) {
Bestandteil bestand = c.getBestandteil(i);
/* Für den jeweiligen Cocktail , Menge usw. dem Model hinzufügen*/
model.addElement(bestand.getMenge() + " " + bestand.getZutat().getEinheit() + " " +
bestand.getZutat().getName());
}
}
Java:
int count = bestand.getMenge() * (Integer) jSpinner1.getModel().getValue();
Das haut nicht hin.
Zum anderen wollte ich mal fragen :
Ich habe 8 Comboboxen und 8 JSpinner.
Bisher hole ich von einer JComboBox den String und vergleiche diesen mit einem Cocktail aus der Liste. Wenn dieser Cocktail true ist , dann soll den seinen Bestandteile * dem JSpinnerwert berechnet werden.
Im Nachhinein übergebe ich diesen Cocktail einer Methode , die dann diesen Cocktail ausgibt , mir erhöhter Menge.
Wie mache ich es wenn ich 8 * dieses Szenario habe?
Geht dass nur wenn ich meine Methoden kopiere und entsprechend die Variable änder?
Oder muss ich die Methoden mit parameter füllen , und immer mit anderen Werten füllen?
Wenn ich das zweite mache , bekomme ich denn nicht stress , ?
Szenario:
Jcombobox: Mai Tai JSlider : 2
*klick * auf berechne : funktionen oben werden beide ausgelöst
Wenn ich nun :
Jcombobox: Mai Tai JSlider : 2
Jcombobox: Mai Tai JSlider : 2
Jcombobox: Mai Tai JSlider : 2
3mal das mache und ich rufe auf, denn ruft er die gleiche Methgode mit verschiedenen Parametern auf.?
Danke für hilfe.
public void partyOrganize() {
Cocktail co;
/* Aktuellen Cocktail aus der Combobox holen*/
String c = (String) jC_party0.getSelectedItem();
int count;
/* alle CocktailObjekte aus der Liste holen*/
for (int i = 0; i < cl.sizeCocktails(); i++) {
co = cl.getCocktail(i);
/* Wenn der Objektname des Cocktail gleich dem namen des Strings
* in der ComboBox ist*/
if (co.getName().equals(c)) {
System.out.println(co.getName()+" "+1);
for (int j = 0; j < co.getBestandteile().size(); j++) {
Bestandteil bestand = co.getBestandteil(i);
System.out.println(bestand.getMenge()+" "+2);
// von jedem Cocktailbestandteil die Menge * dem Wert im Spinner erhöhen
count = bestand.getMenge() * (Integer) jSpinner1.getModel().getValue();
// Von dem Bestandteil neuen Bestand setzen
System.out.println(count +" " +3);
bestand.setMenge(count);
}
partyShoppingList(co);
break;
} // if vorbei
}
}
/* Wird ausgelöst, wenn man auf dem Button 'Einkaufsliste generieren' drückt.*/
public void partyShoppingList(Cocktail co) {
/* Geänderte Daten in der Einkaufsliste anzeigen:*/
/* Dazu Model verwenden:*/
DefaultListModel model = new DefaultListModel();
/* temporäres Cocktail*/
Cocktail c = co;
System.out.println(c.getName()+" "+4);
for (int i = 0; i < c.getBestandteile().size(); i++) {
Bestandteil bestand = c.getBestandteil(i);
/* Für den jeweiligen Cocktail , Menge usw. dem Model hinzufügen*/
model.addElement(bestand.getMenge() + " " + bestand.getZutat().getEinheit() + " " +
bestand.getZutat().getName());
System.out.println(bestand.getMenge());
}
jL_partyShopping.setModel(model);
}
Das ist mein Code, ich habe zusätzlich immer alles ausgeben lassen und Zahlen hinzugefügt:
Ich bekomme es nicht hin , selbst bei einen Cocktail und nur einem jSpinner.
Vorallem wenn ich das zweite mal auf dem knopf drücke haut er mir alles durcheinander :/
Java:
for (int i = 0; i < c.getBestandteile().size(); i++) {
Bestandteil bestand = c.getBestandteil(i);
for(int j =0;j<array.length;j++){
/* Für den jeweiligen Cocktail , Menge usw. dem Model hinzufügen*/
model.addElement(array[j] + " " + bestand.getZutat().getEinheit() + " " +
bestand.getZutat().getName());
System.out.println(bestand.getMenge());
}
}
irgendie die klammersetzung noch , denn klappts...
Muss ich die Klammern anders setzen?
ich meine erhöhen tut er schon die mengen .