我有一个 ListView,它定义了一个自定义 CellFactory。
这些单元格行包含多个矩形,代表商店营业时间、顾客时间等。但是,该甘特图必须对水平滚动使用react。每次水平条移动时,所有条都会重新定位。
问题是它非常慢。
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);
})
}
}
}
有什么技巧可以让渲染速度更快吗?
最佳答案
尝试使用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);
}
}
}
关于java - 如何在 JavaFX 中最有效地移动多个矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45375839/