Mir hat sich schon wieder ein Problem mit dem CardLayout aufgetan (evtl sollte man das einfach in der Schule lernen.)
Ich habe einen Button rAntwort, der normalerweise immer das nächste Panel aufrufen soll, außer, man befindet sich bereits auf einem bestimmten Panel, dann soll er genau das machen, was normalerweise bei allen anderen Buttons passiert: Ein User wird erstellt, der Rankingliste hinzugefügt und man kommt auf den Endscreen.
Mein Frage-Array beinhaltet 4 Fragen, also müsste bei Index 3 die letzte Frage sein. Allerdings wird der Code im if nie ausgeführt (ich hab es durch das setText schon etwas ausprobiert). Habe ich in meiner if-Bedingung etwas falsch gemacht? Im Internet habe ich nur gefunden, dass man mit "getComponent(0)" das aktuelle Panel erfragen können sollte. Es kommt auch keine Fehlermeldung, hab im Debugger geguckt, er überspringt die if-Anweisung einfach und geht zum nächsten Panel, dass zufällig halt auch der Endscreen ist, aber ändern tut er nichts.
Hier wäre noch meine Klasse, in der das Array ist und in der alle Panels auf das Panel mit dem CardLayout geaddet werden, falls das was hilft
LG
Lena
Edit: Anstatt "3" ein "diesesQuiz.fragen.size()-1" zu schreiben, hab ich schon ausprobiert und führt zum gleichen Ergebnis.
Ich habe einen Button rAntwort, der normalerweise immer das nächste Panel aufrufen soll, außer, man befindet sich bereits auf einem bestimmten Panel, dann soll er genau das machen, was normalerweise bei allen anderen Buttons passiert: Ein User wird erstellt, der Rankingliste hinzugefügt und man kommt auf den Endscreen.
Code:
rAntwort.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if(diesesQuiz.panelStapel.getComponent( 0)==diesesQuiz.fragen.get(3).fragePanel)
{
diesesQuiz.endScreen.punktestand++;
diesesQuiz.endScreen.highscoreListe.setText("");
// Spieler wird erstellt
Spieler spieler1 = new Spieler(diesesQuiz.loginPanel.nutzerEingabe.getText(), diesesQuiz.endScreen.punktestand);
diesesQuiz.spielerStände.add(spieler1);
for (int i=0; i<diesesQuiz.spielerStände.size(); i++)
{
diesesQuiz.spielerStände.sort(comp);
diesesQuiz.endScreen.highscoreListe.append(diesesQuiz.spielerStände.get(i).name+ " : "
+diesesQuiz.spielerStände.get(i).score + " P\n");
}
diesesQuiz.card.show(diesesQuiz.panelStapel, "endscreen");
}
else
{
diesesQuiz.endScreen.punktestand++;
diesesQuiz.card.next(diesesQuiz.panelStapel);
}
}
});
Hier wäre noch meine Klasse, in der das Array ist und in der alle Panels auf das Panel mit dem CardLayout geaddet werden, falls das was hilft
Code:
//Fragen werden hinzugefügt und den einzelnen Buttons zugeordnet
fragen = new ArrayList<Frage>();
Frage frage1 = new Frage(this,"Wie viele Pflanzen hat Sabrina?","8","3","4","7");
Frage frage2 = new Frage(this,"In welchem Stockwerk sind die Büros von cortility?","4. Stock","UG","EG","3.Stock");
Frage frage3 = new Frage(this,"Wie heißt der Hund von Ralf Weinmann?","Zoey","Claudia","Martha","Marley");
Frage frage4 = new Frage(this,"Welcher dieser Nachnamen ist NICHT doppelt bei Cortility vorhanden?","Möller","Dörr","Nitschke","Krämer");
fragen.add(frage1);
fragen.add(frage2);
fragen.add(frage3);
fragen.add(frage4);
//Panel-Stapel bekommt das Layout vorgegeben und nimmt andere Panels auf
panelStapel = new JPanel();
card = new CardLayout();
panelStapel.setLayout(card);
panelStapel.add(loginPanel, "login");
panelStapel.add(frage1.fragePanel, "fr1");
panelStapel.add(frage2.fragePanel, "fr2");
panelStapel.add(frage3.fragePanel, "fr3");
panelStapel.add(frage4.fragePanel, "fr4");
panelStapel.add(endScreen, "endscreen");
hauptfenster.add(panelStapel);
LG
Lena
Edit: Anstatt "3" ein "diesesQuiz.fragen.size()-1" zu schreiben, hab ich schon ausprobiert und führt zum gleichen Ergebnis.