Multiple Choice Test

Scratchy

Mitglied
Hallo,

ich soll für den Biologieunterricht ein Quiz erstellen.
Mit Java kam ich bisher gut zurecht...
Das Layout klappt soweit und das Action event funktioniert auch...

Doch wenn nun die zweite Frage gestellt wird, ist der ActionListener immer noch auf die Antworten der ersten Frage eingestellt.
Gibt es eine Möglichkeit den ActionListener zu entfernen und einen neuen zu definieren ?

Hier ist der Code:
Main:
Java:
public class biologie_main {


	
	public static void main(String[] args) {
		new Frage1();
	}

}

und die Frage 1:
Java:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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


public class Frage1 extends JFrame implements ActionListener{
 
	JFrame f;
	JLabel text = new JLabel("Hier kommt eine Biologie Frage hinein!");			//Frage Nr. 1
	JButton knopf1 = new JButton("Antwort A");									//Antwort A
	JButton knopf2 = new JButton("Antwort B");									//Antwort B
	JButton knopf3 = new JButton("Antwort C");									//Antwort C
	JButton knopf4 = new JButton("Antwort D");									//Antwort D
	int Punktzahl = 0;

	public Frage1(){
		f = new JFrame();
		
		f.setTitle("Biologie-Test   -   Frage 1"); //3 Leerzeichen
		
		f.add(text);
	
		f.add(knopf1);
		knopf1.addActionListener(this);
		f.add(knopf2);
		knopf2.addActionListener(this);
		f.add(knopf3);
		knopf3.addActionListener(this);
		f.add(knopf4);
		knopf4.addActionListener(this);
		f.setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		f.setSize(800, 600);
		
		f.setBackground(Color.yellow);
		
		f.setLayout(new GridLayout(-1, 1));
		
		f.setVisible(true);
		
	}

	public void actionPerformed(ActionEvent a) {
		if(a.getSource() == knopf1){									// richtige Antwort
			System.out.println(a.getActionCommand());
			System.out.println(getTitle() + " " + "Richtig !");
			f.setBackground(Color.green);
			Punktzahl = Punktzahl + 1;
			System.out.println("Dein Punktestand beträgt:" + " " + Punktzahl);
			System.out.println(" ");
			Frage2();
		}else{															// falsche Antwort 
			System.out.println(a.getActionCommand());
			System.out.println(getTitle() + " " + "Falsch !");
			f.setBackground(Color.red);
			Punktzahl = Punktzahl + 0;
			System.out.println("Dein Punktestand beträgt:" + " " + Punktzahl);
			System.out.println(" ");
			Frage2();
		}
	}

	private void Frage2() {
		remove(f);
		f.setTitle("Biologie-Test   -   Frage 2");
		text.setText("Hier kommt die Biologie Frage Nr. 2 hinein");		//Frage Nr. 2
		text.repaint();
		knopf1.setText("Antwort A1");									//Antwort A
		knopf1.repaint();
		knopf2.setText("Antwort B1");									//Antwort B
		knopf2.repaint();
		knopf3.setText("Antwort C1");									//Antwort C
		knopf3.repaint();
		knopf4.setText("Antwort D1");									//Antwort D
		knopf4.repaint();
		
	}
}

Danke für eure Hilfe :)
 

HarleyDavidson

Bekanntes Mitglied
Ich würde hier ein Frame erstellen,
das die Oberfläche zur Beantwortung zur Verfügung stellt.

Beim Starten werden die Fragen als Frage-Objekte in eine Liste geladen (optimalerweise als XML / Textdatei eingelesen). Je nach Beantwortung wird die nächste Frage geladen und die Oberfläche auf deren Informationen eingestellt ...

Nach deiner Vorgehensweise hast du ja dann ein Frame pro Frage. Und ob das so sinngemäß ist ...

Ganz grob die Klasse Frage

Java:
public class Frage
{
    private String frage;
    private String antwortA;
    private String antwortB;
    private String antwortC;
    private String antwortD;
    private String richtigeAntwort;

    public Frage( String frage, String antwortA, String antwortB, String antwortC, String antwortD, String richtigeAntwort )
    {
        this.frage = frage;
        this.antwortA = antwortA;
        this.antwortB = antwortB;
        this.antwortC = antwortC;
        this.antwortD = antwortD;
        this.richtigeAntwort = richtigeAntwort;
    }

    //Getter und Setter ...
}
 
Zuletzt bearbeitet:

frankyv

Mitglied
Ich knüpfe an das an, was HarleyDavidson bereits gesagt hat.

Du brauchst eine Liste ArrayList<Frage> in der die Frageobjekte drin stehen.
Ausserdem brauchst du eine Integervariable in der auf die aktuelle Frage verwiesen wird.
Die steht am Anfang auf 0.

Mit frageArrayList.get(index) bekommst du das aktuelle Frageobjekt.

Deine Methode Frage2() würde ich umbenennen in naechsteFrage().
Innerhalb dieser kannst du die Choices umbenennen.(Nicht vergessen den index zu erhöhen)

In actionPerformed(e) fragst du dann nach
((JButton) e.getSource()).getText() == frageArrayList.get(index).getRichtig()
veränderst dementsprechend den Punktestand und rufst danach die Methode naechsteFrage() auf.

So ungefähr jedenfalls...

Viel Glück (und Spaß)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N JavaFX Problem mit table multiple selection AWT, Swing, JavaFX & SWT 5
G JTable Multiple Row Header Example - Probleme mit der Höhe der Zellen AWT, Swing, JavaFX & SWT 4
N multiple DefaultMutableTreeNode in eins AWT, Swing, JavaFX & SWT 2
S NetBeans && multiple Fensteroeffnung AWT, Swing, JavaFX & SWT 3
hdi Swing JTable - multiple Sortierung AWT, Swing, JavaFX & SWT 4
A Multiple Bindings für JButton AWT, Swing, JavaFX & SWT 3
A Multiple Zeilen in einer JTable Zelle AWT, Swing, JavaFX & SWT 6
M JFileChooser und multiple Selektierung auch für Verz? AWT, Swing, JavaFX & SWT 2
P JavaFX aktuelle Tabellenzeile bei Choice-Box-Auswahl in Zelle ermitteln AWT, Swing, JavaFX & SWT 28
cezary Choice, JComboBox oder JList AWT, Swing, JavaFX & SWT 5
N Swing Choice- Problem! AWT, Swing, JavaFX & SWT 8
J AWT choice mit viel Auswahl aktualisiert sich nicht korrekt beim scrollen?! AWT, Swing, JavaFX & SWT 3
Q AWT Choice ein Zeichen hinzufügen AWT, Swing, JavaFX & SWT 4
N Java Choice Bilderausgabe - images - - image - AWT, Swing, JavaFX & SWT 2
L choice probleme AWT, Swing, JavaFX & SWT 9
T Choice "gezielt" darstellen aber wie - mit Koordinaten aber wie? AWT, Swing, JavaFX & SWT 6
F Probleme mit der GUI (Choice) AWT, Swing, JavaFX & SWT 3
H2SO3- choice mit mehrfarbigen einträgen AWT, Swing, JavaFX & SWT 4
I Choice erkennen AWT, Swing, JavaFX & SWT 3
S Choice editierbar machen? AWT, Swing, JavaFX & SWT 6
A Checkbox-Choice Eventproblem (CMV) AWT, Swing, JavaFX & SWT 2
K Choice auswahl und String in Int AWT, Swing, JavaFX & SWT 8
S Dringend: Choice -> PrintLn? AWT, Swing, JavaFX & SWT 11
O Choice/Combobox wird nur 1x aktualisiert AWT, Swing, JavaFX & SWT 3
B Zwei Choice-Menüs verknüpfen AWT, Swing, JavaFX & SWT 2
G JavaFX Steuerung bzw. Test von externer JavaFX Anwendung (liegt nur als jar vor) AWT, Swing, JavaFX & SWT 9
N Swing Mocken von JOptionPane im JUnit-Test AWT, Swing, JavaFX & SWT 3
W JavaFX GUI Test Framework AWT, Swing, JavaFX & SWT 4
T SWT SWTBot Test: Dialog soll sich öffnen,wenn button gedrückt AWT, Swing, JavaFX & SWT 3
7 AWT problem: KeyListener/ test im Label umändern AWT, Swing, JavaFX & SWT 4
T [LWJGL] Depth-Test? AWT, Swing, JavaFX & SWT 2
P Swing Test ob Tabellenspalte sortiert ist AWT, Swing, JavaFX & SWT 6
D JTables, Test highlighten innerhalb einer Zelle AWT, Swing, JavaFX & SWT 5
S Binär Test AWT, Swing, JavaFX & SWT 3
G Test, ob Fenster sichtbar? AWT, Swing, JavaFX & SWT 2
A Automatisierter Test von Swing GUIs AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben