import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class frmMain extends JFrame{
/**
* @param args
*/
//Antwort Schaltflächen
JButton cmdAnsw1, cmdAnsw2, cmdAnsw3, cmdAnsw4;
//Textfelder
JLabel lblInfo, lblFrage;
//dynamisches Array - schon gestellte Fragen werden abgefragt
ArrayList <Integer> asked;
//count - Nr. der aktuell gestellten Frage
//countRight - Anzahl der richtigen Fragen
//questMax - max. gestellte Fragen
int count, countRight, questMax;
//Klasse mit Fragen/Antworten
clsQuestions quest;
int currentQuestion;
public frmMain(){
//Bildschirmgröße abrufen
Dimension d = getToolkit().getDefaultToolkit().getScreenSize();
//Größe und Position des Fensters festlegen
this.setSize(d);
this.setLocation(0,0);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.setTitle("Quiz");
this.setUndecorated(true);
//Init
asked = new ArrayList<Integer>();
quest = new clsQuestions();
count = 0;
countRight = 0;
questMax = 5;
lblInfo = new JLabel();
lblFrage = new JLabel();
cmdAnsw1 = new JButton();
cmdAnsw2 = new JButton();
cmdAnsw3 = new JButton();
cmdAnsw4 = new JButton();
//Namen der Buttons setzen
cmdAnsw1.setName("0");
cmdAnsw2.setName("1");
cmdAnsw3.setName("2");
cmdAnsw4.setName("3");
//Aktion beim Klicken hinzufügen
cmdAnsw1.addActionListener(new ButtonListener(this));
cmdAnsw2.addActionListener(new ButtonListener(this));
cmdAnsw3.addActionListener(new ButtonListener(this));
cmdAnsw4.addActionListener(new ButtonListener(this));
//Buttons auf dem Formular hinzufügen
getContentPane().setLayout(null); // freies Layout
getContentPane().add(cmdAnsw1);
getContentPane().add(cmdAnsw2);
getContentPane().add(cmdAnsw3);
getContentPane().add(cmdAnsw4);
getContentPane().add(lblInfo);
getContentPane().add(lblFrage);
//Größe und Position der Buttons festlegen
cmdAnsw1.setBounds(0, d.height - 200 , d.width / 2 - 5 , 50);
cmdAnsw2.setBounds(d.width / 2 + 5, d.height - 200 , d.width / 2 - 5, 50);
cmdAnsw3.setBounds(0, d.height - 130 , d.width / 2 - 5 , 50);
cmdAnsw4.setBounds(d.width / 2 + 5, d.height - 130 , d.width / 2 - 5, 50);
lblInfo.setBounds(10,10,d.width - 10, 32);
lblInfo.setFont(new Font("Arial", 24,28));
lblInfo.setText("lblInfo");
lblFrage.setBounds(10,80,d.width - 10, 72);
lblFrage.setFont(new Font("Arial", 24,34));
lblFrage.setText("lblFrage");
//Frage aufrufen
NextQuestion();
}
public void Click(String Antwort){
/*Das Array Lsg. enthält die zugehörige richtige Antwort zur Frage
das zuletzt hinzugefügte Object in der ArrayList asked enthält den Index
der aktuell gestellten Frage. "asked.size()" ruft die Anzahl der vorhanden
Objekte in der ArrayList ab. "-1" da bei 0 angefangen wird. "Integer.parseInt"
wandelt einen String in einen int Wert um, um ihn vergleichen zu können.*/
if (clsQuestions.lsg[asked.get(asked.size()-1)] == Integer.parseInt(Antwort)) {
countRight++;
//ab hier
JOptionPane.showMessageDialog(null, "Richtig");
}else{
JOptionPane.showMessageDialog(null, "Falsch, das wäre richtig gewesen: "
+ clsQuestions.antw[currentQuestion][clsQuestions.lsg[asked.get(asked.size()-1)]]);
//bis hier
}
//Sind die Fragen gestellt, erscheint eine Auswertung und es wird von vorne begonnen
if(count == questMax){
JOptionPane.showMessageDialog(null, "Sie haben " + countRight + " von " + questMax + " Fragen richtig beantwortet." , "Fertig", JOptionPane.PLAIN_MESSAGE);
asked.clear();
count = 0;
countRight = 0;
}
NextQuestion();
}
public void NextQuestion(){
int i;
//Zufallszahlengenerator wird initialisiert
Random r = new Random();
//Die Schleife wird solange aufgerufen, bis eine Frage gefunden wird, die noch nicht gestellt wurde.
//ACHTUNG: Gefahr einer Endlosschleife (wenn weniger Fragen vorhanden sind als questMax)
do{
i = r.nextInt(clsQuestions.fragen.length);
//überprüft ob die Frage schon gestellt wurde
}while(asked.contains(i) == true);
SetQuestion(i);
}
public void SetQuestion(int i){
//Setzt die Texte der Frage auf der Oberfläche
cmdAnsw1.setText(clsQuestions.antw[i][0]);
cmdAnsw2.setText(clsQuestions.antw[i][1]);
cmdAnsw3.setText(clsQuestions.antw[i][2]);
cmdAnsw4.setText(clsQuestions.antw[i][3]);
lblFrage.setText(clsQuestions.fragen[i]);
count++;
lblInfo.setText("Frage " + count + " von " + questMax + "\n"+ ". Klicken Sie auf das Verb, welches in die Lücke muss. (Mixed Tenses)");
//fügt die Frage als gestellt hinzu
asked.add(i);
currentQuestion = i;
}
public class ButtonListener implements ActionListener{
frmMain frm;
public ButtonListener(frmMain f){
frm = f;
}
public void actionPerformed(ActionEvent ae) {
//tempButton verweist auf den geklickten Button
JButton tempButton = (JButton) ae.getSource();
frm.Click(tempButton.getName());
return;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
frmMain frm = new frmMain();
frm.setVisible(true);
}
}