我正在测验。我将问题存储在数组中。因此,我使用一个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]++;
}
});
}
这是什么问题? 谢谢!
答案 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。它说明了如何使代码正确响应用户触发的事件。