在while循环中单击按钮时,如何进行下一次迭代?

时间:2019-11-27 04:58:29

标签: java swing while-loop

我正在测验。我将问题存储在数组中。因此,我使用一个while循环来逐个显示问题。当我单击按钮时,计数器+1并转到下一个迭代,即下一个问题。但是,似乎无法解决问题。

final int[] k = {0};
while (k[0] <2){
    ql.setText(qa[k[0]][0]);
    ql.setVisible(true);

    for (int l = 0; l < 4; l++) {
        ch[l].setVisible(true);
        ch[l].setText(String.valueOf((int) (50 * Math.random())));
    }
    rc = (int) (4 * Math.random());
    ch[rc].setText(qa[k[0]][1]);

    nx.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            k[0]++;
        }
    });
}

这是什么问题? 谢谢!

2 个答案:

答案 0 :(得分:1)

您必须反转循环才能以事件驱动的方式工作。所以我在想的是,您应该让按钮单击驱动“循环”,因为它只会激活您的计数器没有耗尽的问题,否则只会忽略更多的按下。

类似的东西:

private void showQuestion(int question) {
    ql.setText(qa[question][0]);
    ql.setVisible(true);

    for (int l = 0; l < 4; l++) {
        ch[l].setVisible(true);
        ch[l].setText(String.valueOf((int) (50 * Math.random())));
    }
    int rc = (int) (4 * Math.random());
    ch[rc].setText(qa[question][1]);
}

...
// In some method...
nx.addActionListener(new ActionListener() {
    int nextQuestion = 1;

    @Override
    public void actionPerformed(ActionEvent e) {
        if (k < 1) {
            showQuestion(nextQuestion++);
        }
    }
});
showQuestion(0); // Shows the first question

答案 1 :(得分:0)

您的代码有很多问题,但是最根本的(针对您的问题)是您误解了代码循环(例如for)和GUI事件循环之间的区别。代码循环执行,然后完成。 GUI事件循环会等到用户执行某些操作然后做出响应。在继续操作之前,不希望让代码循环等待用户的某些操作:这不是GUI的工作方式。

我建议您阅读秋千教程中有关编写事件侦听器的部分:here。它说明了如何使代码正确响应用户触发的事件。