[Erledigt] Quiz grafisch umsetzen

!Ich muss den Thead 2x aktuallisieren um ganzen Quellcode zu sehen, sonst sehe ich immer nur 64 Zeilen, woran lieg es? Ich habe IE.!

Hallo,

ich will dieses Konsolenquiz grafisch umsetzen, damit es eine grafische Oberfläche hat. Ich will außerdem es erweitern und verbessern. Ich habe mir überlegt Fahrschuleprogramm zu schreiben bzw so was ähnliches.
So erstmal hier mein Konsolenquiz:

package drive;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Quiz {

	public static void main(String[] args) {

		int punkte = 0;
		
		String[] frage1 = {
				"Wieviel ist 1 + 1?",
				"<1> Eins",
				"<2> Zwei",
				"<3> Drei",
				"2"
		};

		String[] frage2 = {
				"Wieviel ist 1 + 2?",
				"<1> Eins",
				"<2> Zwei",
				"<3> Drei",
				"3"
		};
		String[] frage3 = {
				"Wieviel ist 2 - 1?",
				"<1> Eins",
				"<2> Zwei",
				"<3> Drei",
				"1"
		};
		//Fragen werden in einem zweidimensionalen String-Array gespeichert
		String[][] liste = {
				frage1,frage2,frage3
		};
		//Ausgabe von Fragen in der Konsole
		for(int i=0;i<liste.length;i++)
		{
						
			System.out.println(liste**[0]);
			System.out.println(liste**[1]);
			System.out.println(liste**[2]);
			System.out.println(liste**[3]);
			System.out.println("Bitte Antwort eingeben: ");
			
			//Einlesen von Eingabe
			BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
			
			try {
				String antwort =  eingabe.readLine();
				System.out.println("Sie haben als Antwort: "+antwort+" eingegeben.");
				
				//Vergleichen von Antworten
				if(antwort.equals(liste**[4]))
				{
					System.out.println("Sie sind ein Genie!
");
					punkte++;
				}
				else
				{
					System.out.println("Gehen Sie zurück in die erste Klasse!
");
				}
				
			} catch (IOException e) {
					System.out.println("Falsche Eingabe!");
				}
		}
		System.out.println("Sie haben "+punkte+" von 3 Punkten erreicht.");
		if(punkte==3)
		{
			System.out.println("Sie können in die zweite Klasse gehen, gratuliere!");
		}
		else
		{
			System.out.println("Sie müssen leider die erste Klasse nochmal wiederholen!");
		}
	}

}

Das will ich grafisch umsetzen. Ich will danach es verändern, aber das kommt später.

So hier mein Code für den grafischen Quiz:

package drive;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Drive extends JFrame{
		
	JLabel label = new JLabel();
	JButton button = new JButton();
	JCheckBox box1, box2, box3;

	String[] frage1 = {
			"Wieviel ist 1 + 1?",
			"<1> Eins",
			"<2> Zwei",
			"<3> Drei",
			"2"
	};

	String[] frage2 = {
			"Wieviel ist 1 + 2?",
			"<1> Eins",
			"<2> Zwei",
			"<3> Drei",
			"3"
	};
	String[] frage3 = {
			"Wieviel ist 2 - 1?",
			"<1> Eins",
			"<2> Zwei",
			"<3> Drei",
			"1"
	};
	String[][] liste = {
			frage1,frage2,frage3
	};
		
	public Drive() {
			setLayout(null);
			setSize(500, 300);
			setResizable(false);
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
						
			label.setSize(200, 20);
			label.setLocation(10, 10);
			
			box1 = new JCheckBox();
			box1.setSize(200,20);
			box1.setLocation(10, 50);
			
			box2 = new JCheckBox();
			box2.setSize(200,20);
			box2.setLocation(10, 100);
			
			box3 = new JCheckBox();
			box3.setSize(200,20);
			box3.setLocation(10, 150);
		
			button = new JButton("Enter");
			button.setSize(100,20);
			button.setLocation(200, 200);
			button.addActionListener(new myListener());
			
			
			add(label);
			add(box1);
			add(box2);
			add(box3);
			add(button);
			
			setVisible(true);

		}
				
		class myListener implements ActionListener{

			public void actionPerformed(ActionEvent e) {

				for(int i = 0;i<liste.length;i++)
				{		
					label.setText(liste**[0]);
					box1.setText(liste**[1]);
					box2.setText(liste**[2]);
					box3.setText(liste**[3]);
				}
				System.out.println("Weiter");
			}
				
		}
}

Oberfläche sieht schon gut aus, nur funktioniert „weiter“ nicht. Ich weiss nicht genau wie ich es umsetzen soll, dass er nachdem ich auf weiter klicke, die nächste Frage anzeigt. Das Programm soll danach, wie das Konsolenquiz, am Ende mir die erreichten Punkte anzeigen(später wird das Programm mir anzeigen, ob ich das Quiz geschafft habe oder nicht).

:confused:
Kann mir jemand ein paar Tipps geben, oder zeigen wie es geht.

Danke :stuck_out_tongue:

(Kurzfassung weils früh ist)
warum Weiter nicht geht kann ich dir nicht sagen das sollte eigentlich klappen, vom Code her seh ich nichts.
Ich würd das jedoch anders machen mach eine Textarea wo du die Frage reinpackst (editable und enabled auf false) und ein Textfeld wo die Antwort reinkommt

Nachtrag das mit der Darstellung kann ich nicht nachvollziehen bei mir geht alles, übersiehst du vielleicht die Scrollbalken?

Schmeiß die Schleife aus deinem Listener raus. Deklariere eine Klassenvariable als counter und ersteze in deinem Listener das “i” durch diesen counter. Nach jeder Betätigung wird der counter um den Faktor 1 inkrementiert. Dann brauchst du noch eine Abfrage, ob der counter größer ist als die Länge des Arrays.

[edit] Null-Layout ist sehr böse. Verwende ein anderes. Deine GUI kann man sehr leicht mit einem BorderLayout in dessen Mitte ein Panel mit GridLayout liegt realisieren.

Danke, habe vergessen dass die Listener so was wie Schleife sind. Solange ich auf den Button klicke, wird der Inhalt immer wieder ausgeführt.

Also GUI(oder wie man es sagt) sieht schon gut aus. Das mit Layout werde ich zum Schluss machen, ich habe vieles vergessen und muss mir die nochmal gründlich anschauen.
Jetzt muss ich dem Programm irgendwie rechnen beibringen, bzw auswerten. Mehrere Antwortmöglichkeiten müssen möglich sein und der soll, das was ich ausgewählt habe, irgendwo abspeichern, für jede Frage und dann zum Schluss auswerten. Ich habe mir überlegt mit if(box1.isSelected()) das zu machen, nur müsste ich dann für jede einzelne Frage neue IfAbfrage schreiben. Das ist bestimmt nicht performant und nicht gut. Dem Konsolenquiz konnte man sagen, welche Frage richtig ist und welche nicht, kann man das hier auch machen? Ich habe im Moment keine Idee wie ich das machen könnte.

So sieht mein Programm aus:

package drive;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Drive extends JFrame{
		
	JLabel label = new JLabel();
	JButton button1, button2;
	JCheckBox box1, box2, box3;
	JTextField field1, field2;
	
	String[] frage1 = {
			"Was bedeutet 30 Zone?",
			"Min-Geschwindigkeit 30 km/h",
			"Max-Geschwindigkeit 30 km/h",
			"Richtgeschwindigkeit 30 km/h",
			"2"
	};

	String[] frage2 = {
			"Wieviele Anhänger darf man mit der Klasse B fahren?",
			"Einen",
			"Keinen",
			"Zwei",
			"1"
	};
	String[] frage3 = {
			"Wie schnell darf man mit Schneeketten fahren?",
			"50 km/h",
			"80 km/h",
			"120 km/h",
			"1"
	};
	String[][] liste = {
			frage1,frage2,frage3
	};
	
	int counter = -1;
	
	public Drive() {
			setLayout(null);
			setSize(500, 300);
			setResizable(false);
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
						
			label.setSize(400, 20);
			label.setLocation(10, 10);
			
			box1 = new JCheckBox();
			box1.setSize(200,20);
			box1.setLocation(10, 50);
			box1.setVisible(false);
			
			box2 = new JCheckBox();
			box2.setSize(200,20);
			box2.setLocation(10, 100);
			box2.setVisible(false);
			
			box3 = new JCheckBox();
			box3.setSize(200,20);
			box3.setLocation(10, 150);
			box3.setVisible(false);
			
			button1 = new JButton("Enter");
			button1.setSize(100,20);
			button1.setLocation(200, 200);
			button1.addActionListener(new myListener());
			
			button2 = new JButton("Ende");
			button2.setSize(100,20);
			button2.setLocation(200, 200);
			button2.setVisible(false);
			
			field1 = new JTextField("Nachname");
			field1.setSize(100, 20);
			field1.setLocation(10, 50);
			field2 = new JTextField("Vorname");
			field2.setSize(100, 20);
			field2.setLocation(10, 100);
			
			add(field1);
			add(field2);
			add(label);
			add(box1);
			add(box2);
			add(box3);
			add(button1);
			add(button2);
			
			setVisible(true);

		}
				
		class myListener implements ActionListener{

			public void actionPerformed(ActionEvent e) {
					
				counter ++;
				if(box1.isSelected())
				
				if(counter <3)
				{
					box1.setVisible(true);
					box2.setVisible(true);
					box3.setVisible(true);
					box1.setSelected(false);
					box2.setSelected(false);
					box3.setSelected(false);
					field1.setVisible(false);
					field2.setVisible(false);
					button1.setText("Weiter");
									
					label.setText(liste[counter][0]);
					box1.setText(liste[counter][1]);
					box2.setText(liste[counter][2]);
					box3.setText(liste[counter][3]);
				}else{
					box1.setVisible(false);
					box2.setVisible(false);
					box3.setVisible(false);
					field1.setVisible(false);
					field2.setVisible(false);
					label.setVisible(false);
					button1.setVisible(false);
					button2.setVisible(true);
				}
					
				System.out.println("Weiter :"+counter);
			}
				
		}
}

Danke

nein das mit dem Selected geht nicht, du musst die Auswahl mit der/den richtigen Antworten vergleichen (equals) und speichern würd ich das einfach in einen Array

Ich werde versuchen das jetzt anders zu machen. So wie ich angefangen habe, gefällt mir überhaupt nicht. Ich melde mich wieder wenn ich überhaupt nicht mehr weiterkomme :smiley:

Danke.