我有一个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(){})。
答案 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并且它是滞后的。在较小的列表上,它可以很好地工作。