[英]JavaFX how to add ChangeListener to auto scroll TableView
我有一个TableView:
@FXML
private TableView<ThreadInfo> threadsTable;
类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(){})。
我发现了我的问题。 两种方法都能完成工作:
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);
}
});
问题是我要在TableView中放入约1k或更多的条目,而且它比较滞后。 在较小的列表中,它可以完美运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.