Schönes Quiz

Scratchy

Mitglied
Hallo,

ich bin noch totaler Java-Anfänger und wollte selber ein Grundgerüst von einem Quiz schreiben.
Das ist mir auch gelungen, jedoch ist meine Vorgehensweise ziemlich unübersichtlich und ich wollte fragen, ob ich meine Fragen und Antworten auslagern kann und was an dieser Vorgehensweise aus der Sicht des erfahrenen Java-Programmierer falsch ist.;)

Hier der Code, der leider sehr unübersichtlich ist:
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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


public class Quiz extends JFrame implements ActionListener{
	
	public static void main(String[] args) {
		new Quiz(); 
	}

	private JPanel p;
	private JLabel label;
	private JLabel label1;
	private JLabel label2;
	private JButton button1;
	private JButton button2;
	private JFrame f;
	
		
	public Quiz(){
		f = new JFrame("Wer wird Millionär");
		f.setDefaultCloseOperation(EXIT_ON_CLOSE);
		f.setSize(600,400);
		p = new JPanel();
		f.getContentPane().add(p);
		p.setLayout(new BorderLayout(0, 0));
		label = new JLabel("Frage 1");
		label1 = new JLabel("Richtig");
		label2 = new JLabel("Falsch");
		button1 = new JButton("Antwort A");
		button2 = new JButton("Antwort B");
		button1.addActionListener(this);
		button2.addActionListener(this);
		p.add(button1, BorderLayout.WEST);
		p.add(button2, BorderLayout.EAST);
		p.add(label, BorderLayout.NORTH);
		//p.add(button);
		f.setVisible(true);
	}




	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == button1){
			System.out.println("Antwort A");
			richtig();
		}if(e.getSource() == button2){
			System.out.println("Antwort B");
			p.removeAll();
			f.setBackground(Color.red);
			p.add(label2, BorderLayout.CENTER);
			f.setVisible(true);
			// new Frage2();
		}
		
		}
	public void richtig() {
		p.removeAll();
		f.setBackground(Color.green);
		p.add(label1, BorderLayout.CENTER);
		f.add(p);
		f.setVisible(true);
		// new Frage2();
	}
	
}
 

java253

Mitglied
So unübersichtlich finde ich es gar nicht.
Deine Variablen könntest du vielleicht besser bezeichnen, Namen wie label1 und button2 sind nicht besonders aussagekräftig.
Ansonsten könntest du so deine Fragen und Antworten auslagern und gleichzeitig weitere Funktionalität einbauen:

Java:
private int questionIndex = -1;
private QuizQuestion[] questions = new QuizQuestion[2];

public Quiz(){

   //...
   questions[0] = new QuizQuestion("Wie alt ist Britney Spears?", new String[] {"26", "32"}, 1);
   questions[1] = new QuizQuestion("Wo wurde Robbie Williams geboren?", new String[] {"New York", "London"}, 0);
   loadNextQuestion();
}

public void loadNextQuestion(){
      questionIndex++;
      button1.setText(questions[questionIndex].answers[0]);
      //und die anderen
}

private class QuizQuestion{
   String question;
   String[] answers;
   int correctAnswer;
   public QuizQuestion(String question, String[] answers, int correctAnswer) {
      this.question = question;
      this.answers = answers;
      this.correctAnswer = correctAnswer;
   }
}
 

Joose

Top Contributor
Java:
public class Quiz extends JFrame implements ActionListener{
	
	private JFrame f;

Du leitest von JFrame ab, aber arbeitest dann sowieso mit einem Klassenattribut vom Type JFrame. Da man nicht vom JFrame ableiten sollte wenn man diese Klasse nicht erweitern will entferne einfach die Ableitung!
 

Ähnliche Java Themen


Oben