gpt4 book ai didi

添加项目时,JavaFX 滚动到 TableView 的底部

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:35 24 4
gpt4 key购买 nike

这里有一个奇怪的问题,我不太清楚如何绕过这个问题。我有一个 TableView ,当一个可观察列表的监听器发现有变化时,它会被填充。所以这是代码:

userController.getAuthImpl().listOfMessages.addListener(new ListChangeListener<Message>() {
@Override
public void onChanged(ListChangeListener.Change<? extends Message> c) {
addMessageToTableView(tblvwBottomAdminNotifications, c.getList());
}
});


public void addMessageToTableView(TableView<Message> tblvw, ObservableList<? extends Message> observableList){
tblvw.getItems().clear();
for(Message msg: observableList)
tblvw.getItems().add(msg);
}
public ObservableList<Message> listOfMessages = FXCollections.observableArrayList(_listOfMessages);

这工作正常,一旦将项目添加到 listOfMessages,表格就会自动更新。我现在想做的是在 ListView 更新时将其滚动到底部。我尝试将以下行添加到 addMessageToTableView 方法中:

tblvw.scrollTo(tblvw.getItems().size()-1);

并且还尝试像这样向 tableview 本身添加一个更改监听器:

tblvwBottomAdminNotifications.getItems().addListener(new ListChangeListener<Message>(){

@Override
public void onChanged(javafx.collections.ListChangeListener.Change<? extends Message> c) {
tblvwBottomAdminNotifications.scrollTo(c.getList().size()-1);

}

});

但两者都以同样的方式出错,并显示以下消息:

Exception in thread "RMI TCP Connection(1)-192.168.56.1" java.lang.IllegalStateException: Not on FX application thread; currentThread = RMI TCP Connection(1)-192.168.56.1

根据我的 Google 技能,JavaFX 提示我从单独的线程访问 TableView 。我可以理解,但是我应该如何访问它,以便当 tableview 确实添加了一个新项目时,它会向下滚动到它?

如果您需要更多信息,请告诉我。

最佳答案

怎么样

Platform.runLater( () -> tblvw.scrollTo(c.getList().size()-1) );

关于添加项目时,JavaFX 滚动到 TableView 的底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31992698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com