Получить текущую позицию узла перетаскивания - PullRequest
0 голосов

Этот код позволяет перемещать узел, удерживая мышь:

private double xc, yc;
private void makePortable(Node node){
    node.setOnMousePressed(event -> {
        xc = node.getTranslateX() - event.getSceneX();
        yc = node.getTranslateY() - event.getSceneY();
    });
    node.setOnMouseDragged(event -> {
        node.setTranslateX(xc+event.getSceneX());
        node.setTranslateY(yc+event.getSceneY());
    });
}

Этот метод встроен в синглтон.У него есть метод, которому передается узел, который добавляется в панель и ранее был переносимым.

public static final Word WORD = new Word();

private Pane input;
private Text text; 

private Word(){
}

public void init(Pane input){
    this.input = input;
}

public void addCanvas(Text text){
    this.text = text;
    makePortable(text);
    input.getChildren().add(text);
}

public void draw(){
    //And here I need to get his current coordinates
    action(text.get???X(), text.get???Y()); 
}

Но теперь мне нужно получить координаты смещенного узла.Как я могу это сделать?

1 Ответ

0 голосов

Проблема не решена, но я нашел обходной путь. Если вам нужно поставить узел на Canvas и нарисовать его, то сначала вам нужно взять Pane (я советую StackPane) Canvas и добавить узел.

Далее необходимо сделать скриншот Node и загрузить этот скриншот в Canvas. Код:

public void loadImage(Image image) {
    canvas.getGraphicsContext2D().drawImage(image,
            0, 0, canvas.getWidth(), canvas.getHeight());
}

public void action(){
    WritableImage wi = new WritableImage((int)canvas.getWidth(),
            (int)canvas.getHeight());
    pane.snapshot(null, wi);
    loadImage(wi);
}

И в конце Pane удалить входящий Node. Удачи! (

...