java - 向对话框添加多项选择并使其正常运行

标签 java swing class dialog

我想要的是向 JDialog 添加一个包含 3-4 个选项的问题

    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.
       }
    }
 }

最佳答案

这是一种获得你想要的东西的方法,你可以采用这个想法并做类似 this 的事情与 CardLayout和一个 JFrame。您需要 JDialog,因此我用它们做了一个示例:

此示例称为 Minimal Complete and Verifiable Example (MCVE)或可运行示例或 Short, Self Contained, Correct Example (SSCCE)您应该在以下问题中提供类似的内容。我还建议您选择 tour并学习How to ask a good question .

您还应该检查Making a JOptionPane with 4 options ,我还用了ternary运算符,您还应该阅读 How to make Dialogs ,因此您可以向其中添加更复杂的 GUI,例如那些按钮和 JTextField 和图像等,例如: this onethis onethis one ,只需使用 Google 或本网站右上角的搜索工具栏即可。

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();
    }
}

这将为您提供与这些类似的输出,您可能需要对其进行编辑以适合您的代码并删除我的代码中的错误,该错误甚至在最后一个对话框中添加了答案按钮(只需添加验证,但我'我只是给你一个想法,所以剩下的就由你来做)。

第一个和最后一个对话框

enter image description here enter image description here

关于java - 向对话框添加多项选择并使其正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36318078/

相关文章:

java - 如何在java小程序中使用html5本地存储?

java - 如何从主要函数 int java 将文本附加到 JTextArea?

java - 如何设置JSlider在窗口中的位置?

python - 简单地将列表附加到Python中的类变量

c++ - qualified-id 在 '=' token /对象计数器变量之前的声明中

java - Activity 泄漏了窗口 com.android.internal.policy.impl.PhoneWindow$DecorView{42de2350

java - 通过cmd行编译时出错

java - 业务逻辑类中的抽象

java - 在 Java 程序中过滤 JTable

ruby - ruby 中类的类型和类的父类(super class)有什么区别?