Получить текущее положение узла перетаскивания

#java #javafx #coordinates #mouse

#java #javafx #координаты #мышь

Вопрос:

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

 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:

Проблема не решена, но я нашел обходной путь. Если вам нужно поместить узел на 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 . Удачи! (: