F
FranzFerdinand
Gast
Hallihallöle,
perfekt. Sieht etwas kompliziert aus, aber ich verstehe es. Da wäre ich nie drauf gekommen. Und auch Google war da nicht hilfreich.
Sodelle, aber ein kleines Problemle hab ich immer noch.
Schaut mal, so sieht meine Klasse aus:
Also ich habe eine Eingabebox namens "jTextFieldDosEingabe", die ihren Inhalt nach sofortigem eingeben und Enter klicken immer in String "doseingabe" umwandelt und ihn dann wie gesagt splittet. Wenn der Split mehr als Dreiteilig ist, weil ich maximal die Eingabe text1:text2:text3 zulasse, dann zeigt er an, dass die Eingabe falsch ist und löscht diese Ausgabe wieder nach 5 Sekunden. (siehe der 5000er Timer.)
Dieses Modell ist so, dass text1 immer der eigentliche Befehl ist, der herausgefiltert wird und text2 und text3 dann irgendwelche Parameter sind, auf die er reagieren soll, wenn 1. erkannt wurde.
Das mache ich mit dem Switch-Case:
Wie man sehen kann, wird beispielsweise wenn ich "neustart" eingebe die Klasse Spielstart.neustart() aufgerufen. Die startet mein Spiel neu. Ist nicht weiter wichtig. Es geht natürlich auch neustart:443:fsd, weil er nur das neustart als essentielle Eigenschaft braucht.
Wichtig ist jetzt folgendes:
Ich habe eine Liste mit gastkarten, die 100 Elemente enthält, die ich irgendwann im Spiel schon mal generiert habe, die auch nutzbar ist.
Und wenn ich den Befehl gastkartebar:x ausführe, soll er bitte das x-te Element dieser Liste rausfischen und es in mein jListBarkartenModel einfügen.
Wie man den dem Quelltext sieht, sucht er sich erst das Schlüsselwort gastkartebar raus.
Dann sucht er sich die Zahl raus, die dahinter stand (Element 1)und schreibt sie in den String information. Selbigen wandle ich dann in einen Integer um, namens barkartennummer.
So und dann rufe ich die barkarten()-Methode auf.
Die soll dann bitte bitte das Element aus der gastkarten-Liste in die jList einfügen. Dazu gettet er dann meine barkartennummer.
====
Das Problem: Das aller erste Mal läuft das alles rund und er macht bei gastkartebar:5 auch brav das 5te (genau genommen das 6te) Element rein.
Danach kann man aber eingeben, was man möchte, er macht dann immer das von vorher.
Wenn ich jetzt gastkartebar:47 eingebe, fügt er wieder das 5. ein. Und wieder und wieder. Er hat sich auf das allererste festgesetzt.
Nur nach nem Neustart des Programms kann ich wieder ein neues Element festlegen, worauf er sich festnagelt.
Mit System.out.println lasse ich mir die Nummer ausgeben, er sagt dann auch in der Konsole immer 5.
Wo hab ich jetzt was nicht durchdacht?
Schöner Gruß
Lukas
perfekt. Sieht etwas kompliziert aus, aber ich verstehe es. Da wäre ich nie drauf gekommen. Und auch Google war da nicht hilfreich.
Sodelle, aber ein kleines Problemle hab ich immer noch.
Schaut mal, so sieht meine Klasse aus:
Java:
package spiel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.Arrays;
import javax.swing.Timer;
public class Spielverlauf extends CafeRoot{
private static final long serialVersionUID = 7888790160235600024L;
public Spielverlauf() throws IOException{
super(spielname);
}
public static void doseingabeverarbeitung() {
doseingabe = jTextFieldDosEingabe.getText();
doseingabepart.addAll(Arrays.asList(doseingabe.split(":")));
if (doseingabepart.size() > 3) {
eingabeinkorrekt(5000);
}
}
public static void doseingabefenster() throws IOException, InterruptedException {
doseingabeverarbeitung();
doseingabeerfolgt = true;
switch(doseingabepart.get(0).toLowerCase()) {
case "neustart":
Spielstart.neustart();
break;
case "beenden":
Spielstart.beenden();
break;
case "gastkartebar":
String information = doseingabepart.get(1);
barkartennummer = Integer.parseInt(information);
System.out.println(information);
barkarten();
break;
default: doseingabeerfolgt = false;
}
if(doseingabeerfolgt == true) {
jTextFieldDosEingabe.setText("");
doseingabeerfolgt = false;
jLabelMeldung.setText("");
} else {
eingabeinkorrekt(5000);
}
}
public static void eingabeinkorrekt(int timerzeit) {
jLabelMeldung.setText("Deine Eingabe war inkorrekt!");
new Timer(timerzeit, new ActionListener() {
public void actionPerformed(ActionEvent e) {
jLabelMeldung.setText("");
} } ).start();
}
public static void barkarten() {
restbarplaetze -= 1;
jListBarkartenModel.addElement(gastkarten.get(barkartennummer));
System.out.println(barkartennummer);
System.out.println(gastkarten.get(barkartennummer));
}
}
Also ich habe eine Eingabebox namens "jTextFieldDosEingabe", die ihren Inhalt nach sofortigem eingeben und Enter klicken immer in String "doseingabe" umwandelt und ihn dann wie gesagt splittet. Wenn der Split mehr als Dreiteilig ist, weil ich maximal die Eingabe text1:text2:text3 zulasse, dann zeigt er an, dass die Eingabe falsch ist und löscht diese Ausgabe wieder nach 5 Sekunden. (siehe der 5000er Timer.)
Dieses Modell ist so, dass text1 immer der eigentliche Befehl ist, der herausgefiltert wird und text2 und text3 dann irgendwelche Parameter sind, auf die er reagieren soll, wenn 1. erkannt wurde.
Das mache ich mit dem Switch-Case:
Java:
switch(doseingabepart.get(0).toLowerCase()) {
Wichtig ist jetzt folgendes:
Java:
case "gastkartebar":
String information = doseingabepart.get(1);
barkartennummer = Integer.parseInt(information);
System.out.println(information);
barkarten();
break;
Ich habe eine Liste mit gastkarten, die 100 Elemente enthält, die ich irgendwann im Spiel schon mal generiert habe, die auch nutzbar ist.
Und wenn ich den Befehl gastkartebar:x ausführe, soll er bitte das x-te Element dieser Liste rausfischen und es in mein jListBarkartenModel einfügen.
Wie man den dem Quelltext sieht, sucht er sich erst das Schlüsselwort gastkartebar raus.
Dann sucht er sich die Zahl raus, die dahinter stand (Element 1)und schreibt sie in den String information. Selbigen wandle ich dann in einen Integer um, namens barkartennummer.
So und dann rufe ich die barkarten()-Methode auf.
Java:
public static void barkarten() {
restbarplaetze -= 1;
jListBarkartenModel.addElement(gastkarten.get(barkartennummer));
System.out.println(barkartennummer);
System.out.println(gastkarten.get(barkartennummer));
}
====
Das Problem: Das aller erste Mal läuft das alles rund und er macht bei gastkartebar:5 auch brav das 5te (genau genommen das 6te) Element rein.
Danach kann man aber eingeben, was man möchte, er macht dann immer das von vorher.
Wenn ich jetzt gastkartebar:47 eingebe, fügt er wieder das 5. ein. Und wieder und wieder. Er hat sich auf das allererste festgesetzt.
Nur nach nem Neustart des Programms kann ich wieder ein neues Element festlegen, worauf er sich festnagelt.
Mit System.out.println lasse ich mir die Nummer ausgeben, er sagt dann auch in der Konsole immer 5.
Wo hab ich jetzt was nicht durchdacht?
Schöner Gruß
Lukas