【发布时间】:2016-03-17 20:23:17
【问题描述】:
我写了如下方法,用来当我按下按钮时做出反应:
private void handlePlayButton(ActionEvent e){
for (int i = 0; i < commands.size(); i++) {
list.getSelectionModel().select(i);
try {
Thread.sleep(1000);
} catch (InterruptedException ie){
System.out.println("Error at handlPlayButton: interruption");
}
}
}
在这段代码中,我尝试从第一行开始选择每个元素,然后等待 1 秒来选择下一个元素,但它似乎等待 n-1 秒(其中 n 是项目的大小),然后选择最后一项。有没有办法解决这个问题?
顺便说一下,list 字段是 ListView<String>。
【问题讨论】:
-
也许您正在尝试实现与 Timeline to Display Random images one by one 类似模式的逻辑,但也许不是,我很难理解您在这里真正想要完成的事情。永远不要在 JavaFX 应用程序线程上调用 sleep(它只会挂起你的 UI)。
-
好吧,我有一个 ListView,假设其中有 4 个元素(所以 4 行),我有一个按钮。当我按下按钮时,它必须选择第一个元素,等待 1 秒,然后选择第二个元素,等待 1 秒,等等。但在我的情况下,它等待 3 秒,然后选择最后一个元素而不选择之前的元素之一.所以我想解决这个问题。
-
好的,我想我明白你现在想要做什么,但我不知道你为什么想做这样的事情(看起来很奇怪)。此外,如果用户再次按下按钮或在 ListView 中选择另一个项目,而自动循环逻辑正在进行中,会发生什么情况?当到达列表末尾时会发生什么,自动化过程是停止,还是再次循环到第一个项目然后继续?
-
嗯非常好的问题:重新按下按钮只会结束当前循环并重新启动它。如果用户在循环期间选择了一个项目,它将停止循环并选择用户选择的项目(显然)。当过程结束时,它只选择最后一个项目,就是这样。这个问题确实看起来很奇怪,但列表中的每个元素都与 GUI 的不同部分连接,它会根据列表值输出内容,但您不必担心