import javafx.beans.property.SimpleDoubleProperty; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.geometry.Rectangle2D; import javafx.scene.Parent; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.image.ImageViewBuilder; import javafx.scene.layout.StackPane; import javafx.scene.layout.StackPaneBuilder; import javafxpert.cube.FaceType; public class PhotoFace extends Parent { public static double edgeLength = 256.0; public static double radius = (edgeLength * 0.5); SimpleDoubleProperty zPos = new SimpleDoubleProperty(0); public PhotoFace(FaceType type) { StackPane stackPane = StackPaneBuilder.create().prefWidth(edgeLength) .prefWidth(edgeLength).build(); Rectangle2D viewPort = null; switch (type) { case FRONT: viewPort = new Rectangle2D(0, 0, edgeLength, edgeLength); break; case REAR: viewPort = new Rectangle2D(0, 0, edgeLength, edgeLength); break; case TOP: viewPort = new Rectangle2D(0, 0, edgeLength, edgeLength); break; case BOTTOM: viewPort = new Rectangle2D(0, 0, edgeLength, edgeLength); break; case LEFT: viewPort = new Rectangle2D(0, 0, edgeLength, edgeLength); break; case RIGHT: viewPort = new Rectangle2D(0, 0, edgeLength, edgeLength); break; default: break; } ImageView photoFace = ImageViewBuilder.create().viewport(viewPort) .image(new Image("image.jpg")).build(); stackPane.getChildren().add(photoFace); this.getChildren().add(stackPane); zPos.addListener(new ChangeListener<Object>() { public void changed(ObservableValue<?> ov, Object oldValue, Object newValue) { // TODO } }); } }