如何在JavaFX中最有效地移动多个矩形

时间:2017-07-28 14:20:32

标签: java javafx graphics

我有一个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);
            })
        }
    }
}

是否有一些技巧可以使渲染更快?

1 个答案:

答案 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);
        }
    }
}