简体   繁体   English

JavaFX如何添加ChangeListener来自动滚动TableView

[英]JavaFX how to add ChangeListener to auto scroll TableView

I have a TableView: 我有一个TableView:

@FXML
    private TableView<ThreadInfo> threadsTable;

Class ThreadInfo: 类ThreadInfo:

public class ThreadInfo {

    private StringProperty threadFrom;

    private StringProperty threadDate;

    private StringProperty threadStatus;

    private StringProperty threadTo;

// getters, setters

}

I'm trying to add ChangeListener to auto scroll TableView down every time new ThreadInfo object is addedd to my TableView. 每当新的ThreadInfo对象添加到TableView时,我都试图添加ChangeListener来自动向下滚动TableView。 What I tried: 我试过的

threadsTable.getItems().addListener(
                new ListChangeListener<ThreadInfo>() {
                    @Override
                    public void onChanged(
                            javafx.collections.ListChangeListener.Change<? extends ThreadInfo> arg0) {
                        threadsTable.scrollTo(threadsTable.getItems().size());
                    }

                });

It has no compilation errors, but doesn't work. 它没有编译错误,但是不起作用。 I also tried with ChangeListener, but I get: The method addListener(ListChangeListener) in the type ObservableList is not applicable for the arguments (new ChangeListener(){}). 我也尝试使用ChangeListener,但是得到:类型ObservableList的方法addListener(ListChangeListener)不适用于参数(new ChangeListener(){})。

I've found my problem. 我发现了我的问题。 Both methods do the job: 两种方法都能完成工作:

threadsTable.getItems().addListener(
                new ListChangeListener<ThreadInfo>() {
                    @Override
                    public void onChanged(
                            javafx.collections.ListChangeListener.Change<? extends ThreadInfo> arg0) {
                        threadsTable.scrollTo(threadsTable.getItems().size());
                    }

                });

And: 和:

threadsTable.accessibleRoleProperty().addListener(
            new ChangeListener<Object>() {

                @Override
            public void changed(ObservableValue<? extends Object> arg0,
                    Object arg1, Object arg2) {
                threadsTable.scrollTo(threadsTable.getItems().size()-1);
            }
        });

The problem is that I'm putting about 1k or more entries to my TableView and it's laggy. 问题是我要在TableView中放入约1k或更多的条目,而且它比较滞后。 On smaller lists it works perfectly. 在较小的列表中,它可以完美运行。

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

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