#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
. Удачи! (: