, :
, .
, .
, , , .
, , Rectangle .
, :
@Override
public void start(Stage stage) {
final PerspectiveCamera cam = new PerspectiveCamera();
cam.setFieldOfView(20);
cam.setFarClip(10000);
cam.setNearClip(0.01);
cam.getTransforms().addAll(new Rotate(60,Rotate.X_AXIS),new Translate(-200,-200,300));
final Group root = new Group();
final Box floor = new Box(500, 500, 1);
floor.setTranslateX(200);
floor.setTranslateY(200);
floor.setTranslateZ(50);
floor.setMaterial(new PhongMaterial(Color.YELLOW));
root.getChildren().add(floor);
final Box box = new Box(50, 50, 50);
box.setMaterial(new PhongMaterial(Color.RED));
root.getChildren().add(box);
final Rectangle rectangle = new Rectangle(400, 400, Color.TRANSPARENT);
rectangle.setMouseTransparent(true);
rectangle.setDepthTest(DepthTest.DISABLE);
root.getChildren().add(rectangle);
box.setOnDragDetected((MouseEvent event)-> {
box.setMouseTransparent(true);
rectangle.setMouseTransparent(false);
box.setCursor(Cursor.MOVE);
box.startFullDrag();
});
box.setOnMouseReleased((MouseEvent event)-> {
box.setMouseTransparent(false);
rectangle.setMouseTransparent(true);
box.setCursor(Cursor.DEFAULT);
});
rectangle.setOnMouseDragOver((MouseDragEvent event)-> {
Point3D coords = event.getPickResult().getIntersectedPoint();
coords = rectangle.localToParent(coords);
box.setTranslateX(coords.getX());
box.setTranslateY(coords.getY());
box.setTranslateZ(coords.getZ());
});
final Scene scene = new Scene(root, 800, 600, true);
scene.setCamera(cam);
stage.setScene(scene);
stage.setTitle("JavaFX 3D Drag&Drop");
stage.show();
}
, , .
, .

, , . .