我希望我没有重复提出问题,但我找不到一个特别针对我的问题的问题。
我正在开发一个小型数学闪卡应用程序,使用JavaFX创建GUI。程序应该按照以下方式运行:
1.用户选择设置,然后按下“开始”按钮。 2.GUI显示问题和用户输入文本字段。 3.用户在X秒内输入答案,否则GUI会自动移动到下一个问题-或者用户可以通过按下“下一个”按钮立即进入下一个问题。 4.GUI显示得分和平均分。
问题是,“getText()”从用户文本字段中获得的信息会在用户有机会输入答案之前立即被处理。如何使程序等待X秒钟或点击“下一个”按钮后再处理用户的答案?以下是我的代码:
这是有问题的代码...至少是我看到的。
我尝试使用
我没有包含“下一步”按钮代码,因为我无法让GUI转到测试页面。
感激在任何代码上提供的帮助。
1.用户选择设置,然后按下“开始”按钮。 2.GUI显示问题和用户输入文本字段。 3.用户在X秒内输入答案,否则GUI会自动移动到下一个问题-或者用户可以通过按下“下一个”按钮立即进入下一个问题。 4.GUI显示得分和平均分。
问题是,“getText()”从用户文本字段中获得的信息会在用户有机会输入答案之前立即被处理。如何使程序等待X秒钟或点击“下一个”按钮后再处理用户的答案?以下是我的代码:
//start button changes view and then runs startTest()
start.setOnAction(e -> {
setLeft(null);
setRight(null);
setCenter(test_container);
running_program_title.setText(getDifficulty().name() + " Test");
buttons_container.getChildren().clear();
buttons_container.getChildren().addAll(next, quit, submit);
startTest();
});
这是有问题的代码...至少是我看到的。
//startTest method calls askAdd() to ask an addition question
void startTest() {
int asked = 0;
int correct = 0;
while (asked < numberOfQuestions) {
if(askAdd()){
correct++;
asked++;
}
}
boolean askAdd() {
int a = (int) (Math.random() * getMultiplier());
int b = (int) (Math.random() * getMultiplier());
//ask question
question.setText("What is " + a + " + " + b + "?");
//code needed to pause method and wait for user input for X seconds
//retrieve user answer and return if its correct
return answer.getText().equalsIgnoreCase(String.valueOf(a+b));
}
我尝试使用
Thread.sleep(X)
,但这会冻结GUI,直到我指定的时间过去,然后才执行addAsk()
方法和循环,进入测试页面。(我知道是因为程序设置了将问题和答案输入打印到控制台)。它仅显示最后一个问题。我没有包含“下一步”按钮代码,因为我无法让GUI转到测试页面。
感激在任何代码上提供的帮助。
progressProperty
应该是0到1之间的数字,所以你不应该将其与从0到100变化的值进行双向绑定。这里最好使用单向绑定:progressBar.progressProperty().bind(percentOfTimeUsed.divide(100.0));
- jewelsea