繁体   English   中英

将项目添加到JavaFX时滚动到tableview的底部

[英]JavaFX scroll to bottom of tableview when items are added to it

这里很奇怪,我不太想知道如何解决这个问题。 我有一个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,表就会自动更新。 我现在想做的是在更新列表视图时将其滚动到底部。 我尝试将以下行添加到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);

    }

});

但是,以下消息均以相同方式出错:

线程“ RMI TCP Connection(1)-192.168.56.1”中的异常java.lang.IllegalStateException:在FX应用程序线程上不存在; currentThread = RMI TCP连接(1)-192.168.56.1

我的Google技能是JavaFX抱怨我从一个单独的线程访问tableview。 我能理解,但是我应该如何以这样的方式访问它:当tableview确实添加了新项目时,它会向下滚动到它?

如果您需要更多信息,请与我们联系。

怎么样

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

您可以在表视图本身的“项目”列表中添加一个changelistener,以便在更新时可以被动地滚动自身?

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

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

        }

    });

因此,您无需将其添加到tblvwBottomAdminNotifications中,而是将其直接添加到tblvw中。 当该表视图更新时,它将在其侦听器中调用onChanged方法,并滚动到列表的底部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM