我有一个ListView,它定义了一个自定义的CellFactory。
这些单元格行包含多个矩形,表示商店营业时间,客户时间等。然而,此甘特图必须对水平滚动作出反应。每次水平条移动时,所有条都会重新定位。
问题在于它非常慢。
public class shopCellWorker extends ListCell<Shop> {
...
public ShopCellWorker(ScrollBar hbar, List<CustomerVisit> visits) {
this.hbar = hbar;
visits.forEach(v -> {
Rectangle r = new Rectangle();
... setup ...
rlist.add(r);
}
hbar.valueProperty().addListener(new UpdateListener());
}
private class UpdateListener implements ChangeListener {
@Override
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
rlist.forEach(rec -> {
... do some simple math to determine the position ...
relocate(x, 3);
})
}
}
}
是否有一些技巧可以使渲染更快?
答案 0 :(得分:1)
尝试使用Group。
这里只是草稿版本:
public class shopCellWorker extends ListCell<Shop> {
Group rectGroup = new Group();
public ShopCellWorker(ScrollBar hbar, List<CustomerVisit> visits) {
visits.forEach(v -> {
Rectangle r = new Rectangle();
... setup ...
rectGroup.getChildren().add(r);
}
hbar.valueProperty().addListener(new UpdateListener());
}
private class UpdateListener implements ChangeListener {
@Override
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
// Have a calculated new possition here
rectGroup.setTranslateX(calculatedNewXPos);
}
}
}