有没有办法可以停止程序并等待用户单击按钮

时间:2016-05-08 01:39:33

标签: java swing actionlistener

问题是当单击按钮并进入开始游戏方法时,程序不会等待问题方法中包含的动作侦听器。相反,它会跳到最后一个方法。感谢。

    //Setting Main Layout
    Game.setLayout(new BorderLayout());
    Game.add(NorthName, NORTH);
    Game.add(SouthScore, SOUTH);
    Game.add(Center, CENTER);

    //Setting NorthName Layout
    NorthName.setLayout(new GridLayout(0,2,2,0));
    NorthName.add(name);
    NorthName.add(getName);

    //Setting SouthScore Layout
    SouthScore.setLayout(new FlowLayout());
    SouthScore.add(scoreL);

    scoreL.setText("Score: " + String.valueOf(scoreN) + "/10");

    //Setting Center
    Center.setLayout(new GridLayout(4,3,0,0));
    Center.add(intro);
    Center.add(question);
    Center.add(True);
    Center.add(False);
    Center.add(status);
    Center.add(answer);


    True.setText("Start");
    False.setText("Exit");
    intro.setText("");
    question.setText("");
    status.setText("");
    answer.setText("");


    True.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            intro.setText("Hello " + getName.getText());
            True.setText("True");
            False.setText("False");

            status.setText("");
            answer.setText("");

            startGame();

        }
    });

    False.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            intro.setText("Hello guest");
            True.setText("True");
            False.setText("False");

            status.setText("Well... ");
            answer.setText("That's too bad. ;)");

            startGame();

        }
    });



}

开始游戏方法

void startGame(){

    scoreN = 0;

    setQuestionOne();
    setQuestionTwo();
    setQuestionThree();
    setQuestionFour();
    setQuestionFive();
    setFinalScore();

}

这就是设置问题方法中的每一个都是相同的。

void setQuestionOne(){

    question.setText("i'Robot is about Robots.");

    True.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            status.setText("Correct! +3");
            answer.setText("This Movie is about robots!");
            scoreN = scoreN + 3;
            scoreL.setText("Score: " + String.valueOf(scoreN) + "/10");

        }
    });

    False.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            status.setText("Incorrect! +0");
            answer.setText("This Movie is about robots!");
            scoreN = scoreN + 0;

        }
    });


}

1 个答案:

答案 0 :(得分:4)

使用JOptionPane。您可以在JOptionPane中单独显示每个问题。该对话框仅在用户响应对话框时关闭。

阅读How to Make Dialogs上的Swing教程中有关工作示例的部分。

否则您需要重新设计表单。那就是你会显示一个问题。然后在第一个问题的ActionListener中,您将显示第二个问题,依此类推。在第二个问题的ActionListener中,显示第三个问题。

或者在ActionListener中,您需要调用“下一个问题”方法。因此,在这种情况下,您将使用ArrayList来保存每个问题。然后每次回答问题时,您将转到ArrayList中的下一个问题。这是更好的方法,因为您可以轻松更改要问的问题数量。你永远不应该用硬编码方法来提出不同的问题。

此外,变量名称不应以大写字符开头。有些变量名称是正确的,有些则不是。保持一致!