Reputation: 66
What I want is to add a question with 3-4 options to the JDialog
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class VocabHelper {
private JFrame mainFrame;
private JPanel mainPanel;
private JPanel animalPanel;
public JDialog animalDialog;
private JLabel titleLbl;
private JLabel subtitle;
//Call main GUI
public VocabHelper() {
mainGUI();
}
//Main Method
public static void main(String[] args) {
VocabHelper vocabHelper = new VocabHelper();
vocabHelper.showActionEvents();
}
//Edit the mainGUI
private void mainGUI() {
mainFrame = new JFrame("VocabHelper");
mainFrame.setSize(500, 500);
/*titleLbl = new JLabel("Vocab Helper", JLabel.CENTER);
subtitle = new JLabel("Choose a category to continue", JLabel.CENTER);
mainFrame.add(titleLbl);
mainFrame.add(subtitle);*/
mainFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent) {
System.exit(0);
}
});
mainPanel = new JPanel();
mainFrame.add(mainPanel);
mainFrame.setVisible(true);
}
//Create quizGUI
public void quizGUI() {
quizDialog = new JDialog();
quizDialog.setName("Quiz 1");
quizDialog.setSize(500,500);
quizDialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
quizDialog.setVisible(false);
addQuizEvent();
}
//add Buttons and listeners
public void showActionEvents() {
JButton quizButton = new JButton("quiz");
JButton biologyButton = new JButton("Biology");
JButton geologyButton = new JButton("Geology");
JButton historyButton = new JButton("History");
JButton sportsButton = new JButton("Sports");
JButton techButton = new JButton("Technology");
quizButton.setActionCommand("Quiz");
biologyButton.setActionCommand("Biology");
geologyButton.setActionCommand("Geology");
historyButton.setActionCommand("History");
sportsButton.setActionCommand("Sports");
techButton.setActionCommand("Technology");
QuizButton.addActionListener(new ButtonClickListener());
biologyButton.addActionListener(new ButtonClickListener());
geologyButton.addActionListener(new ButtonClickListener());
historyButton.addActionListener(new ButtonClickListener());
sportsButton.addActionListener(new ButtonClickListener());
techButton.addActionListener(new ButtonClickListener());
mainPanel.add(QuizButton);
mainPanel.add(biologyButton);
mainPanel.add(geologyButton);
mainPanel.add(historyButton);
mainPanel.add(sportsButton);
mainPanel.add(techButton);
mainFrame.setVisible(true);
}
//add events to quiz dialog this is where i want to create the multiple choice questins the classes will be below.
public void addQuizEvent() {
JButton nextButton = new JButton("Next");
nextButton.setActionCommand("Next");
nextButton.addActionListener(new ButtonClickListener());
quizDialog.add(nextButton);
quizDialog.setVisible(true);
}
//When button quiz is pressed open dialog
private class ButtonClickListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if (command.equals("Quiz")) {
quizGUI();
}
}
}
}
//Class tester for the multiple choice im thinking this is what goes in the dialog i just dont know how.
public class QuizTester
{
public static void main(String[] args)
{
//Multiple choice question
ChoiceQuestion second = new ChoiceQuestion();
second.setText("In which country was the inventor of Java born?");
second.addChoice("Australia", false);
second.addChoice("Canada", true);
second.addChoice("Denmark", false);
second.addChoice("United States", false);
//create quiz and add the questions to the quiz then present the quiz
Quiz q = new Quiz();
q.addQuestion(second);
q.presentQuestions();
}
}
//new class for multiple choice logic
import java.util.ArrayList;
/**
A question with multiple choices.
*/
public class ChoiceQuestion {
private ArrayList<String> choices;
/**
Constructs a choice question with no choices.
*/
public ChoiceQuestion()
{
choices = new ArrayList<String>();
}
/**
Adds an answer choice to this question.
@param choice the choice to add
@param correct true if this is the correct choice, false otherwise
*/
public void addChoice(String choice, boolean correct)
{
choices.add(choice);
if (correct)
{
// Convert choices.size() to string
String choiceString = "" + choices.size();
setAnswer(choiceString);
}
}
public void display()
{
// Display the question text
super.display();
// Display the answer choices
for (int i = 0; i < choices.size(); i++)
{
int choiceNumber = i + 1;
System.out.println(choiceNumber + ": " + choices.get(i));
}
}
}
//class for the quiz where the quiz is created.
import java.util.ArrayList;
import java.util.Scanner;
/**
A quiz contains a list of questions.
*/
public class Quiz
{
private ArrayList<Question> questions;
/**
Constructs a quiz with no questions.
*/
public Quiz()
{
questions = new ArrayList<Question>();
}
/**
Adds a question to this quiz.
@param q the question
*/
public void addQuestion(Question q)
{
questions.add(q);
}
/**
Presents the questions to the user and checks the response.
*/
public void presentQuestions()
{
Scanner in = new Scanner(System.in);
for (Question q : questions)
{
q.display();
System.out.print("Your answer: ");
String response = in.nextLine();
System.out.println(q.checkAnswer(response));\
//over here display this question but in the dialog and with bubbles that they can click on.
}
}
}
Upvotes: 0
Views: 4119
Reputation: 11153
This is a way to get what you want, you can take this idea and do something like this with a CardLayout
and a JFrame
. You're asking for JDialog
s so I made an example with them:
You should also check Making a JOptionPane with 4 options, I also used a ternary operator and you should also read How to make Dialogs, so you can add more complex GUI into them, such as those buttons and a JTextField
and images, etc., like: this one or this one or this one, just use Google or the search tool bar on the right top corner of this site.
import java.awt.*;
import javax.swing.*;
public class DialogExamples {
String[] answers = new String[] {"A1", "A2", "A3", "A4"};
String[] questions = new String[] {"Q1", "Q2", "Q3", "Your score: "};
int response = -2; //-2 because I'm not sure what value does response has, -1 or 3 on the last option
int i = 0;
int score = 0;
String message = "";
public DialogExamples() {
do {
message = i < 3 ? questions[i] : questions[i] + score;
while (response != 0) { //Correct answer is A1
response = JOptionPane.showOptionDialog(null, message, "Title",
JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE,
null, answers, answers[0]);
}
i++;
score++; //Add your logic
response = -2;
} while (i < questions.length); //i = number of questions
}
public static void main (String args[]) {
DialogExamples de = new DialogExamples();
}
}
This will give you an output similar to these ones, and you might have to edit it to fit your code and remove an error on my code which adds answer buttons even on the last dialog (just add a validation, but I'm only giving you the idea, so it's up to you to do the rest).
The 1st and last dialogs
Upvotes: 1