2017-07-28 68 views
0

我有一個ListView,它具有定義的自定義CellFactory。如何在JavaFX中最有效地移動多個矩形

這些單元格行包含多個矩形,這些矩形表示商店營業時間,客戶時間等。然而,該甘特圖必須對水平滾動作出反應。每當水平條移動時,所有條都會重新定位。

問題是它很慢。

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

它是快速轉換一個矩形? – Calips

回答

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