【问题标题】:Mutiple Dialog Box Prompts Depending On User Input多个对话框提示取决于用户输入
【发布时间】:2015-05-24 07:58:35
【问题描述】:

这是我需要做的:询问用户他参加了多少次测验。然后,提示用户输入那么多等级。当用户输入完成绩后,告诉他他所有测验的平均成绩。你不知道用户会输入什么号码

例如,如果用户说他参加了 3 次测验,提示应该是:“输入测验等级 1:”,然后是“输入测验等级 2:”,然后是“输入测验等级 3:”

这是我目前所了解的......我不确定如何根据用户参加的测验次数来多次提示用户......

int numQuiz;
count = 1;
numQuiz = Integer.parseInt(JOptionPane.showInputDialog("How many quizzes did you take?"));
do
{

} while (count != 0);

【问题讨论】:

    标签: java swing


    【解决方案1】:

    for 循环可能会有所帮助:

    for (int i = 0; i < numQuiz; i++) {
        // ask user to "Enter quiz grade XX", XX being (i+1)
    } 
    

    【讨论】:

      【解决方案2】:

      您为什么不简单地询问用户,“您参加了多少测验?”。收到用户的输入后,只需根据用户指定的输入创建一个新的JPanel,然后将这个新的JPanel呈现在一个JOptionPane中即可一步完成,而不是多次询问和烦人拥有多个JOptionPanes 的用户。

      一个小例子:

      import java.awt.*;
      import java.awt.event.*;
      import javax.swing.*;
      
      public class OptionPaneTest {
      
          private int size;
          private JTextField[] gradeField;
      
          private void displayGUI() {
              size = Integer.parseInt(
                  JOptionPane.showInputDialog(
                      "Enter total grades to calculate : "));
              System.out.println(size);
      
              JOptionPane.showMessageDialog(null, getPanel(size));
          }
      
          private JPanel getPanel(final int size) {
              JPanel panel = new JPanel(
                  new FlowLayout(FlowLayout.LEFT, 5, 5));
              JLabel label = new JLabel("Average : ", JLabel.CENTER);
              panel.add(label);
              gradeField = new JTextField[size];
              for (int i = 0; i < gradeField.length; i++) {
                  gradeField[i] = new JTextField(3);          
                  panel.add(gradeField[i]);
              }
      
              gradeField[size - 1].addActionListener(new ActionListener() {
                  @Override
                  public void actionPerformed(ActionEvent ae) {
                      int sum = 0;
                      for (JTextField textField : gradeField) {
                          if (textField.getDocument().getLength() > 0) {
                              sum += Integer.parseInt(textField.getText());
                          }
                      }
                      System.out.println("Average : " + (sum / size));
                  }
              });
      
              return panel;
          }
      
          public static void main(String[] args) {
              Runnable runnable = new Runnable() {
                  @Override
                  public void run() {
                      new OptionPaneTest().displayGUI();
                  }
              };
              EventQueue.invokeLater(runnable);
          }
      }
      

      希望您可以根据需要对其进行修改。它在控制台上提供输出。或者,您可以在同一 JPanel 上放置 JLabel 以向用户显示 平均值

      但是,令我惊讶的是,程序要求用户输入他/她的成绩。用户是否会真正提供(或会记住过去收集的所有成绩)。明智的做法是,如果您将用户获得的每个成绩放入 List 或其他 Collection 并简单地对其进行迭代,以找到 Average(尽管这只是我的意见,因为我真的不太了解你的项目)

      【讨论】:

      • 我不能。我们还没有在课堂上讲过这个。到目前为止,我们只介绍了 while、do-while 和 for 循环
      • @Dan:你不能做什么?这个例子没有什么可以提前调用的。尽管您所指的只是基本的核心 Java 部分,但是您的讲师怎么会带您到Swing,这可能会在您学习过程的早期阶段为您处理更多高级主题:-)我想推荐你this link,它使用DocumentListener,这样你就可以在用户输入任何JTextField 时立即计算平均值,但现在我认为我做对了:-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 2011-05-11
      • 1970-01-01
      相关资源
      最近更新 更多