У меня есть прямоугольник и другой тип узла справа, который представляет собой VBox, дочерние элементы которого представляют собой HBox, содержащий пунктирные прямоугольники над линией, разделитель и пунктирный прямоугольник под линией. Я могу перетащить левый прямоугольник, но я хочу иметь возможность перетащить его на один из меньших прямоугольников с пунктиром, чтобы перетащенный прямоугольник занял место, выделенное пунктиром. Как я могу go сделать это? Пример кода того, что у меня есть:
package sample;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class Example extends Application {
@Override
public void start(Stage stage) {
Rectangle r1 = new Rectangle();
r1.setX(50);
r1.setY(50);
r1.setWidth(200);
r1.setHeight(100);
r1.setFill(Color.rgb(30,30,30));
r1.setStroke(Color.WHITE);
Rectangle r2 = new Rectangle();
r2.setX(300);
r2.setY(50);
r2.setWidth(100);
r2.setHeight(50);
r2.setFill(Color.rgb(30,30,30));
r2.setStroke(Color.WHITE);
r2.setStyle("-fx-stroke-dash-array: 2");
makeDraggable(r1);
makeDraggable(r2);
Group root = new Group(r2, r1);
Scene scene = new Scene(root, 800, 400);
scene.setFill(Color.rgb(30, 30, 30));
stage.setTitle("Example");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]) {
launch(args);
}
private void makeDraggable(Node n) {
final Delta dragDelta = new Delta();
n.setOnMousePressed(mouseEvent -> {
dragDelta.x = n.getLayoutX() - mouseEvent.getSceneX();
dragDelta.y = n.getLayoutY() - mouseEvent.getSceneY();
});
n.setOnMouseDragged(mouseEvent -> {
n.setLayoutX(mouseEvent.getSceneX() + dragDelta.x);
n.setLayoutY(mouseEvent.getSceneY() + dragDelta.y);
});
}
}
class Delta { double x, y; }
Левый прямоугольник - это источник, маленькие прямоугольники с пунктирными линиями справа - это цели