JavaFX如何将ChangeListener添加到自动滚动TableView

时间:2015-03-10 19:03:48

标签: java javafx

我有一个TableView:

@FXML
    private TableView<ThreadInfo> threadsTable;

Class ThreadInfo:

public class ThreadInfo {

    private StringProperty threadFrom;

    private StringProperty threadDate;

    private StringProperty threadStatus;

    private StringProperty threadTo;

// getters, setters

}

每次将新的ThreadInfo对象添加到我的TableView时,我都会尝试添加ChangeListener以自动滚动TableView。我尝试了什么:

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

                });

它没有编译错误,但不起作用。我也尝试过使用ChangeListener,但是我得到:ObservableList类型中的方法addListener(ListChangeListener)不适用于参数(new ChangeListener(){})。

1 个答案:

答案 0 :(得分:0)

我发现了自己的问题。这两种方法都可以完成这项工作:

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

                });

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

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

问题在于我将大约1k或更多条目放入我的TableView并且它是滞后的。在较小的列表上,它可以很好地工作。