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

标签 java javafx graphics

我有一个 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/

相关文章:

java - 组合框中的系统运行服务

java - 如何从父类路径使用 CDI 托管 bean

Javafx TextArea 不可编辑的行

opengl - 如何从滚动,俯仰和偏航中获取摄像机的矢量?

java - 使用java解析HTML中的数字

Java 8 : How to create map from list where Key is fetched from same class (empID) and value as object(Employee) itself?

java - jxBrowser 为 JavaFX 添加关键监听器

css - -fx-border-style 在运行时看起来不像预期的那样,但在 SceneBuilder 上

python - 如何使误差线与 matplotlib 中的点/线颜色相同

c - 极地到矩形和背面