向 Dialog 添加多项选择并使其正常运行

2022-01-15 00:00:00 class dialog java swing

我想要的是在 JDialog

中添加一个带有 3-4 个选项的问题

 导入 java.awt.*;导入 java.awt.event.*;导入 javax.swing.*;公共类 VocabHelper {私有 JFrame 主框架;私人JPanel主面板;私人JPanel 动物面板;公共 JDialog 动物对话;私有 JLabel 标题Lbl;私人 JLabel 字幕;//调用主界面公共 VocabHelper() {主界面();}//主要方法公共静态无效主要(字符串[]参数){VocabHelper vocabHelper = new VocabHelper();vocabHelper.showActionEvents();}//编辑主GUI私人无效mainGUI(){mainFrame = new JFrame("VocabHelper");mainFrame.setSize(500, 500);/*titleLbl = new JLabel("词汇助手", JLabel.CENTER);subtitle = new JLabel("选择一个类别继续", JLabel.CENTER);mainFrame.add(titleLbl);mainFrame.add(副标题);*/mainFrame.addWindowListener(new WindowAdapter() {公共无效窗口关闭(窗口事件窗口事件){System.exit(0);}});主面板 = 新的 JPanel();mainFrame.add(mainPanel);mainFrame.setVisible(true);}//创建测验GUI公共无效测验GUI(){quizDialog = 新的 JDialog();quizDialog.setName("测验 1");quizDialog.setSize(500,500);quizDialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);quizDialog.setVisible(false);addQuizEvent();}//添加按钮和监听器公共无效showActionEvents(){JButton quizButton = new JButton("quiz");JButton 生物学按钮 = new JButton("生物学");JButton geologyButton = new JButton("地质");JButton historyButton = new JButton("History");JButton sportsButton = new JButton("Sports");JButton techButton = new JButton("技术");quizButton.setActionCommand("测验");bioButton.setActionCommand("生物学");geologyButton.setActionCommand("地质");historyButton.setActionCommand("历史");sportsButton.setActionCommand("运动");techButton.setActionCommand("技术");QuizButton.addActionListener(new ButtonClickListener());bioButton.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);}//将事件添加到测验对话框这是我想在下面创建多项选择题的地方.公共无效 addQuizEvent() {JButton nextButton = new JButton("Next");nextButton.setActionCommand("下一步");nextButton.addActionListener(new ButtonClickListener());quizDialog.add(nextButton);quizDialog.setVisible(true);}//当按下按钮测验时打开对话框私有类 ButtonClickListener 实现 ActionListener {公共无效actionPerformed(ActionEvent e){字符串命令 = e.getActionCommand();如果(command.equals(测验")){测验GUI();}}}}//多项选择的类测试器我认为这是对话框中的内容,我只是不知道如何.公共类 QuizTester{公共静态无效主要(字符串 [] 参数){//多选题ChoiceQuestion second = new ChoiceQuestion();second.setText("Java的发明者出生在哪个国家?");second.addChoice("澳大利亚", false);second.addChoice("加拿大", true);second.addChoice("丹麦", false);second.addChoice("美国", false);//创建测验并将问题添加到测验然后呈现测验测验 q = new Quiz();q.addQuestion(第二个);q.presentQuestions();}}//多选逻辑的新类导入 java.util.ArrayList;/**一个有多个选择的问题.*/公共类选择问题{私有数组列表<字符串>选择;/**构造一个没有选择的选择题.*/公共选择问题(){选择 = 新的 ArrayList<String>();}/**为这个问题添加一个答案选项.@param 选择要添加的选择@param correct 如果这是正确的选择,则为 true,否则为 false*/public void addChoice(字符串选择,布尔值正确){选择.添加(选择);如果(正确){//将choices.size() 转换为字符串字符串choiceString = "" +choices.size();设置答案(选择字符串);}}公共无效显示(){//显示问题文本超级显示();//显示答案选项for (int i = 0; i 

解决方案

这是一种得到你想要的东西的方法,你可以接受这个想法并做一些类似

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

解决方案

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 JDialogs so I made an example with them:

This example is called a Minimal Complete and Verifiable Example (MCVE) or Runnable Example or a Short, Self Contained, Correct Example (SSCCE) and you should provide something like this on your following questions. I'd also recommend you to take the tour and learn How to ask a good question.

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

相关文章