Or use Flowless https://github.com/TomasMikula/Flowless
Tomas On Jul 13, 2015 2:36 PM, "Tom Schindl" <[email protected]> wrote: > Use a ListView ;-) Unfortunately the base class (VirtualFlow is not > public API) > > Tom > > On 13.07.15 20:19, Christian Krampenschiesser wrote: > > Hi all, > > > > I am trying around since some time to load images when they are visible > in > > a scollpane. > > However the only solution I got so far is quite complicated and done via > > checking the bounds in the scene. > > However sometimes the calculated bounds of the item in the scene are way > > out of the scene. > > I am really looking for a simpler solution then my current one. > > My tests are fine so far with small amounts of thumbnails. however with > big > > scenes (~3000 thumbnails) everything goes wrong :( > > But if there is none maybe someone can point out my wrong bounding box > > calculations and why they are wrong. It seems I didn't understand > > everything correctly: > > > > protected SimpleObjectProperty<GalleryItem> item = new > > SimpleObjectProperty<>();//contains, path and loads thumbnail + real > > image > > > > .... > > > > button.localToSceneTransformProperty().addListener(new > > ChangeListener<Transform>() {//button has an imageview which displays > > the thumbnail > > @Override > > public void changed(ObservableValue<? extends Transform> observable, > > Transform oldValue, Transform newValue) { > > Point2D point = button.localToScene(button.getLayoutX(), > > button.getLayoutY()); > > Scene scene = button.getScene(); > > > > boolean isLayoutedCorrectly = button.getWidth() > 100 && > > button.getHeight() > 100;//hack to execute after layouting, otherwise > > all items are visible > > > > if (scene != null && button.getParent() != null && > > isLayoutedCorrectly && armed) {//armed is set 100ms after adding all > > buttons to a flowpane in a scrollpane > > BoundingBox sceneBox = new BoundingBox(scene.getX(), > > scene.getY(), scene.getWidth(), scene.getHeight()); > > BoundingBox buttonBox = new BoundingBox(point.getX(), > > point.getY(), button.getWidth(), button.getHeight()); > > > > if (sceneBox.intersects(buttonBox)) {//visible > > if (imageView.getImage() == null) { > > log.debug("Showing {}", button.getText()); > > Image image = item.get().loadThumbNail(); > > if (image != null) { > > imageView.setImage(image); > > imageView.setFitHeight(image.getHeight()); > > imageView.setFitWidth(image.getWidth()); > > } > > } > > } > > } > > } > > }); > > > > > > Thanks! > > > > Christian > > > > > -- > Thomas Schindl, CTO > BestSolution.at EDV Systemhaus GmbH > Eduard-Bodem-Gasse 5-7, A-6020 Innsbruck > http://www.bestsolution.at/ > Reg. Nr. FN 222302s am Firmenbuchgericht Innsbruck >
