I am making a quiz, where questions are stored in a textfile. I wish that when i call the file containing a set of 10 questions, the questions instead of being displayed in a dialogue box using JOptionPane, i wish that they are displayed instead in a JFrame, where the user can also type his answers. Can someone pls help me? Thanks a lot.
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
import java.util.Calendar;
public class GQ extends JFrame implements ActionListener {
private static final int FRAME_WIDTH = 1024;
private static final int FRAME_HEIGHT = 763;
private static final int FRAME_X_ORIGIN =0;
private static final int FRAME_Y_ORIGIN = 0;
private JTextField Title;
private JLabel prompt;
private JLabel prompt1;
AnswerStore answerStore = new AnswerStore();
boolean timeForMore;
public static void main (String[] args) {
JOptionPane.showMessageDialog(null, "This is a Geography Quiz");
JOptionPane.showMessageDialog(null, "Good Luck");
GQ frame = new GQ();
frame.setVisible(true);
}
public GQ() {
Container contentPane;
JButton button1, button2, button3, button4, button5;
JTextField inputLine;
setSize (FRAME_WIDTH, FRAME_HEIGHT);
setTitle("Geography Quiz");
setLocation(FRAME_X_ORIGIN, FRAME_Y_ORIGIN);
contentPane = getContentPane();
contentPane.setLayout(null);
button1 = new JButton("Plate Tectonics");
button2 = new JButton("Rivers");
button3 = new JButton("Rocks");
button4 = new JButton("Quit");
button1.setBounds(270,225,900,50);
button2.setBounds(270,325,900,50);
button3.setBounds(270,425,900,50);
button4.setBounds(270,525,900,50);
button1.setFont(new Font("Arial", Font.BOLD, 30));
button2.setFont(new Font("Arial", Font.BOLD, 30));
button3.setFont(new Font("Arial", Font.BOLD, 30));
button4.setFont(new Font("Arial", Font.BOLD, 30));
button1.setBorder(BorderFactory.createRaisedBevelBorder());
button2.setBorder(BorderFactory.createRaisedBevelBorder());
button3.setBorder(BorderFactory.createRaisedBevelBorder());
button4.setBorder(BorderFactory.createRaisedBevelBorder());
button1.setBackground (Color.pink);
button1.setForeground (Color.blue);
button2.setBackground (Color.pink);
button2.setForeground (Color.blue);
button3.setBackground (Color.pink);
button3.setForeground (Color.blue);
button4.setBackground (Color.pink);
button4.setForeground (Color.blue);
prompt = new JLabel( );
prompt.setText("This is a Geography Quiz");
prompt.setSize(900,50);
prompt.setLocation(540,30);
prompt.setFont(new Font("Times New Roman", Font.BOLD, 40));
prompt.setForeground(Color.orange);
prompt1 = new JLabel( );
prompt1.setText("Choose any of the following:");
prompt1.setSize(900,80);
prompt1.setLocation(600,100);
prompt1.setFont(new Font("Times New Roman", Font.BOLD, 30));
contentPane.add(prompt);
contentPane.add(prompt1);
contentPane.add(button1);
contentPane.add(button2);
contentPane.add(button3);
contentPane.add(button4);
button1.addActionListener(this); // to open the textfiles
button1.setActionCommand("b1");
button2.addActionListener(this);
button2.setActionCommand("b2");
button3.addActionListener(this);
button3.setActionCommand("b3");
button4.addActionListener(this);
button4.setActionCommand("b4");
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
String ac = e.getActionCommand();
String[] questions = null;
String[] answers = null;
if (ac.equals("b1")) {
questions = readFile("plate_tectonics.txt");
answers = answerStore.tectonicAnswers;
} else if(ac.equals("b2")) {
questions = readFile("rivers.txt");
answers = answerStore.riverAnswers;
} else if(ac.equals("b3")) {
questions = readFile("rocks.txt");
answers = answerStore.rockAnswers;
} else if (ac.equals("b4")) {
System.exit(0);
}
askQuestions(questions, answers);
}
public void stopAndShowResults() {
timeForMore = false;
}
private String[] readFile(String path) {
Scanner s = null;
StringBuilder sb = new StringBuilder();
String separator = "\n";
try {
s = new Scanner(new BufferedReader(new FileReader(path)));
// s.useDelimiter(",\\s*");
while (s.hasNext()) {
sb.append(s.nextLine() + separator);
// JOptionPane.showMessageDialog(null,s.next());
}
} catch(IOException e) {
System.out.println("read error: " + e.getMessage());
} finally {
if (s != null)
s.close();
// break;
}
}
private void askQuestions(String[] questions, String[] answers) {
int count = 0;
int point = 0;
for(int j = 0; j < questions.length; j++) {
String input = JOptionPane.showInputDialog(null, questions[j]);
if(answers[j].equals(input))
{
count++;
point++;
timeForMore = true;
}
else if(timeForMore==false)
break;
}
JOptionPane.showMessageDialog(null, "You answered " + count +
" out of " + questions.length +
" questions correctly.");
JOptionPane.showMessageDialog(null, "Your Geography Quiz score is " + ((point*100)/10) + " % ");
if(point>=0 && point<=3)
{
JOptionPane.showMessageDialog(null, "You need to Improve");
}
if(point>=4 && point<=7)
{
JOptionPane.showMessageDialog(null, "Good");
}
if(point>=8 && point<=10)
{
JOptionPane.showMessageDialog(null, "You did Great");
}
}
}
class AnswerStore {
String[] tectonicAnswers = {
"Hellenic", "destructive", "100km", "Italy", "Wegner",
"Mariana", "Sicily", "created", "constructive", "Mediterranean"
};
String[] riverAnswers = {
"Gorges", "Meanders", "Levees", "Yes", "Less Economic Developed Countries",
"crescent shaped lakes", "More Economic Developed Countries", "No", "River Discharge", "No"
};
String[] rockAnswers = {
"40km", "Igneous Rock", "Sedimentary", "Basalt", "Organic",
"pressure", "Oolites", "Igneous", "dark black", "basalt"
};
}
Thanks.