与JFrame的琐事游戏

时间:2013-12-03 15:34:54

标签: java jframe

我正在尝试制作一个琐事游戏。我的问题是,当我尝试运行程序时,问题没有显示在框架中。我该怎么办?这是我到目前为止所做的。任何帮助都会很棒。提前谢谢。

package trivia;
import java.util.Arrays;
import java.util.List;

public class ChemistryJFrame extends javax.swing.JFrame {
    String question, answer;
    ChemistryJFrame[] questionbank = new ChemistryJFrame[3];
    List<ChemistryJFrame> questionlist = Arrays.asList(questionbank);
    int quest;

    public ChemistryJFrame() {
        initComponents();  
    }

    @SuppressWarnings("unchecked")


    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        dispose();
        MainJFrame Main = new MainJFrame();
        Main.setVisible(true);

    }                                        

    public static void main(String args[]) {
        ChemistryJFrame bank = new ChemistryJFrame();
        bank.banklist();
        bank.startquiz();
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ChemistryJFrame().setVisible(true);
            }
        });
    }

    public void banklist()
    {
        questionbank[0] = new ChemistryJFrame();
        questionbank[0].question = "Which of the following scientists was awarded the Nobel Prize in 1911 for the discovery of the radioactive elements, radium and polonium?\n A) Charles Darwin\n B) Dmitri Mendeleev\n C) Marie Curie";
        questionbank[0].answer = "C";

        questionbank[1] = new ChemistryJFrame();
        questionbank[1].question = "How many electrons can occupy an s orbital?\n A) one\n B) two\n C) three";
        questionbank[1].answer = "B";

        questionbank[2] = new ChemistryJFrame();
        questionbank[2].question = "Which noble gas has the highest melting point ?\n A) argon\n B) xenon\n C) radon";
        questionbank[2].answer = "C";
    }

    public void startquiz()
    {
        for(quest=1; quest<10; quest++)
        {
            questionlabel.setText(questionbank[quest].question);
        }
    }



    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JLabel questionlabel;
    // End of variables declaration                   
}

3 个答案:

答案 0 :(得分:0)

你的开始测验功能对我来说似乎完全没错。

目前你没有看到任何东西,因为测验开始功能非常快速地将文本设置为每个问题 - 最后在问题9结束,这是空白的,因为你从未在银行列表功能中设置它。

我想你打算将文本设置为qustion [0]文本,然后等待某种用户响应?

答案 1 :(得分:0)

public void startquiz()
{
  for(quest=1; quest<10; quest++)
  {
    questionlabel.setText(questionbank[quest].question);
  }
}

很多问题:

  • 您正在从1迭代到10,但您只将questionbank定义为3个项目的数组。 ArrayIndexOutOfBounds被抛出。

  • 即使解决了上述问题,您只需在数据显示之前迭代所有问题。你只能看到最后一个。学习使用监听器进行编程,这就是GUI的工作方式(不像命令行程序那样顺序)。

  • 对于不存在的按钮,你也有actionListener方法,清理你的代码。

答案 2 :(得分:0)

你永远不会真正创建questionlabel。您需要先创建它,然后将其添加到框架中。 也在这段代码中:

for(quest=1; quest<10; quest++)
    {
        questionlabel.setText(questionbank[quest].question);
    }

您将覆盖标签文字10次,只会显示最后一个问题。您可能需要的是十种不同的标签。 另一件事是你只创建了3个问题,但迭代超过10个。在Java中的数组从零开始,所以你需要将for(quest=1更改为for (quest=0

这些不是你的代码的所有问题,但是继续尝试,你最终会到达那里:)