Ich baue mir gerade ein Game zusammen, bei dem man immer drei "Kärtchen" aufdecken muss. Wenn es die richtigen sind, hat man gewonnen.
In diesem Fall möchte ich alle Kärtchen (jedes Kärtchen ist ein JPanel, 7x7 an der Zahl) durch neue ersetzen, damit man gleich mit dem nächsten Spiel fortfahren kann.
Allerdings funktioniert das nicht, und ich sehe nur eine graue Fläche ...
Die JPanels sind im Array card[] gespeichert. Mit folgendem Code nun versuche ich, alle JPanels zuerst zu entfernen (remove) und danach die neuen Daten zu setzen und mit set_field () die neuen JPanels hinzuzufügen.
Wenn ich diesen Code so ausführe, sehe ich nur eine graue Fläche in meinem Fenster. Wenn ich 'play.this.remove(card);' jedoch auskommentiere, läuft alles einwandfrei, nur das halt kein neues Spiel gestartet wird wenn man fertig ist.
Warum fuktioniert das nicht?
Java:
publicvoidset_new_game(){for(int i=0;i<50;i++){
play.this.remove(card[i]);System.out.println("done");}
zahl =(int)(Math.random()*50+1);
play.this.setVisible(true);
play.this.setTitle("Suchen Sie drei Zahlen um die Zahl "+zahl+" zu berechnen!");set_field();}
An dieser Stelle mal für mich eine Verständnisfrage:
was genau macht
play.this.wasauchimmer()
Ich meine, this ist eine Referenz auf das aktuelle Objekt. Du rufst das aber wie eine Methode der Klasse play auf. Hab sowas noch nie gesehen, was genau passiert da ?
classA{classB{voidfoo(){// So kann ich meine eigene bar()-Methode aufrufen:this.bar();B.this.bar();A.B.this.bar();// So kann ich bar() meiner umliegenden Klasseninstanz aufrufen:A.this.bar();}voidbar(){}}voidbar(){}}
[c]play[/c] müsste also ein Klassenname sein. Marco, wenn ich da recht habe, solltest Du Dir nochmal die Benennungsrichtlinien einprägen (groß- / klein): [c]KlassenName[/c], [c]methodenName[/c], [c]variablenName[/c], [c]packagename[/c], [c]COMPILE_TIME_KONSTANTE[/c].
Ok, ich habe 49 auf 50 korrigiert. Auch packe (pack()) ich das ganze jetzt neu. Die neuen Panels werden jetzt immerhin angezeigt, allerdings habe ich nun an einem ganz anderen Ort ein Problem.
Wenn vom Benutzer etwas falsch gesetzt wird, soll es natürlich automatisch wieder zurückgesetzt werden. Hierfür habe ich die Methode setBack();
In ihr werden einige Arrays zurückgesetzt, was auch funktioniert. Allerdings bekomme ich
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
gemeldet. Allerdings verstehe ich das nicht, da mein Code (er folgt sogleich), eigentlich funktionieren müsste ...
Java:
staticJPanel[] card =newJPanel[50];//Habe ich auf 50 gestellt, wegen ArrayOutOfBounds//Erstellen der Panels in Methode setField();publicvoidset_field(){final card[] cards =new card[49];int z =0;for(int y =1;y<=7;y++){for(int x =1;x<=7;x++){finalint f = z;
cards[z]=newcard();
card[z]= cards[z].add_card(z, x, y);
card[z].addMouseListener(newMouseAdapter(){//CODE}});
play.this.add(card[z]);
z++;}}
panels_set =true;}//setBack();publicvoidset_back(){//Alle Koordinaten verschwinden lassen!
setted[1][1]=0;
setted[1][2]=0;
setted[2][1]=0;
setted[2][2]=0;
setted[3][1]=0;
setted[3][2]=0;//Alle möglichen Koordinaten auf 0 setzenfor(int i=0;i<16;i++){
pos_co[i][1]=0;
pos_co[i][2]=0;}if(panels_set==true){for(int i=0;i<50;i++){
card[i].setBackground(Color.yellow);//Hier erscheint der Fehler, woran liegts?}}}
Weshalb gibt es da einen Fehler, ich prüfe ja noch extra, ob die Felder gesetzt sind ...?