奇怪的是,我无法弄清楚如何解决这个问题.我有一个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);
Run Code Online (Sandbox Code Playgroud)
这样工作正常,一旦将项添加到listOfMessages,表就会自动更新.我现在要做的一点是,在更新时将列表视图滚动到底部.我尝试将以下行添加到addMessageToTableView方法:
tblvw.scrollTo(tblvw.getItems().size()-1);
Run Code Online (Sandbox Code Playgroud)
并且还尝试向tableview本身添加一个更改侦听器,如下所示:
tblvwBottomAdminNotifications.getItems().addListener(new ListChangeListener<Message>(){
@Override
public void onChanged(javafx.collections.ListChangeListener.Change<? extends Message> c) {
tblvwBottomAdminNotifications.scrollTo(c.getList().size()-1);
}
});
Run Code Online (Sandbox Code Playgroud)
但是两个错误都以同样的方式出现以下消息:
线程"RMI TCP连接(1)-192.168.56.1"中的异常java.lang.IllegalStateException:不在FX应用程序线程上; currentThread = RMI TCP连接(1)-192.168.56.1
我的谷歌技能是JavaFX抱怨我从一个单独的线程访问tableview.我可以理解,但是如何以这样的方式访问它:当tableview确实添加了一个新项目时,它会向下滚动到它?
如果您需要更多信息,请与我们联系.
怎么样
Platform.runLater( () -> tblvw.scrollTo(c.getList().size()-1) );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5346 次 |
| 最近记录: |