JavaFXListView
我有一个JavaFXListView,java,javafx,Java,Javafx,我有一个列表视图列表。我可以使用以下代码通过按钮轻松获取ListView中的下一项: public void toNext(){ list.getSelectionModel().selectNext(); } 但是如果我想用一个按钮自动浏览ListView,它将无法工作。我尝试了以下代码: public void play(){ try { for (int i = 0; i < list.getItems().size() ; i++) {
列表视图列表
。我可以使用以下代码通过按钮轻松获取ListView中的下一项:
public void toNext(){
list.getSelectionModel().selectNext();
}
但是如果我想用一个按钮自动浏览ListView,它将无法工作。我尝试了以下代码:
public void play(){
try {
for (int i = 0; i < list.getItems().size() ; i++) {
list.getSelectionModel().select(i);
Thread.sleep(500);
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
public void play(){
试一试{
对于(int i=0;i
这段代码不选择列表中的不同字符串,只跳到给定等待时间后的最后一个字符串。如何让它以500毫秒的延迟选择列表中的每个字符串?您必须在UI线程中包装使UI更新的调用,否则所有更新都在末尾的一组中完成,因此它会跳到列表的末尾
public void play(){
try {
for (int i = 0; i < list.getItems().size() ; i++) {
final int index = i;
Platform.runLater(() -> {
list.getSelectionModel().select(index)
});
Thread.sleep(500);
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
public void play(){
试一试{
对于(int i=0;i{
list.getSelectionModel().select(索引)
});
睡眠(500);
}
}捕获(中断异常例外){
例如printStackTrace();
}
}
您必须在UI线程中包装使UI更新的调用,否则所有更新都在末尾的一组中完成,因此它会跳到列表的末尾
public void play(){
try {
for (int i = 0; i < list.getItems().size() ; i++) {
final int index = i;
Platform.runLater(() -> {
list.getSelectionModel().select(index)
});
Thread.sleep(500);
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
public void play(){
试一试{
对于(int i=0;i{
list.getSelectionModel().select(索引)
});
睡眠(500);
}
}捕获(中断异常例外){
例如printStackTrace();
}
}
问题是,您的循环完全在FXApplicationRead中运行。因此,UI在循环期间不会更新 最好是这样:
public void play(){
Thread t = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < lijst.getItems().size(); i++) {
final int idx = i;
Platform.runLater(new Runnable() {
@Override
public void run() {
lijst.getSelectionModel().select(idx);
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
});
t.start();
}
public void play(){
线程t=新线程(新的可运行线程(){
@凌驾
公开募捐{
对于(int i=0;i
问题是,您的循环完全在FXApplicationRead中运行。因此,UI在循环期间不会更新 最好是这样:
public void play(){
Thread t = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < lijst.getItems().size(); i++) {
final int idx = i;
Platform.runLater(new Runnable() {
@Override
public void run() {
lijst.getSelectionModel().select(idx);
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
});
t.start();
}
public void play(){
线程t=新线程(新的可运行线程(){
@凌驾
公开募捐{
对于(int i=0;i
考虑使用动画:
Timeline animation = new Timeline(
new KeyFrame(Duration.millis(500), e -> list.getSelectionModel().selectNext()));
list.getSelectionModel().select(0);
animation.setCycleCount(list.getItems().size()-1);
animation.play();
这种方法的优点包括
考虑使用动画:
Timeline animation = new Timeline(
new KeyFrame(Duration.millis(500), e -> list.getSelectionModel().selectNext()));
list.getSelectionModel().select(0);
animation.setCycleCount(list.getItems().size()-1);
animation.play();
这种方法的优点包括
这可能是因为您没有调用
lijst.getSelectionModel().select(i)
在UI线程中,意味着不在UI线程上调用play,因为它不应该被调用。很抱歉,这只是一个输入错误,但这不是问题所在;)@这可能是因为您没有调用lijst.getSelectionModel().select(i)
在UI线程中,意味着不在UI线程上调用play,因为它不应该被调用。很抱歉,这只是一个输入错误,但这不是问题所在;)@hotzstIt将等待500毫秒,然后选择第一个和最后一个,但中间的不会被选择…它将等待500毫秒,然后选择第一个和最后一个,但中间的不会被选择。。。