如何在散点图上拖放

How to drag'n'drop on a scatter chart

我有一个散点图,我希望能够移动点,拖动它们 问题是它不像 canvas,我显然不能使用 eventgetX()getSceneX(),因为有轴,根据轴的大小,它们不在同一位置场景,所以 0/0 显然没有根据图表设置,如果我改变场景的大小,距离:border/axis 也会改变

相关代码:

<ScatterChart fx:id="chart" onDragDetected="#chartDragDetected"

在 .fxml 中

和:

//The method associated with the chart    
@FXML
    void chartDragDetected(MouseEvent event) {
        //Lots of try to find the coordinate but they change 
        //depending of the size of the scene
    }

.

//in the initialize, populating the chart
double res=0;
for (double x = fct.getInf(); x<=fct.getSup(); x+=0.05 ){ //precision of graph
    res = fct.f_de_x(x);
    Data<Number,Number> dt = new Data<Number, Number>(x, res);
    series.getData().add(dt);
}
chart.getData().add(series);

在控制器中

因此,发布答案中的代码,如果它可能每天对某人有用的话: 在我的控制器的初始化方法中:

chart.getData().get(0).getData().forEach(data->new DnDToMoveData(data));

所以 DnDtoMoveData 是一名实习生 class,这就是它的样子:

public class DnDToMoveData{
    double pressPositionX;
    double pressPositionY;

    DnDToMoveData(Data<Number, Number> data){
        data.getNode().setOnMousePressed(event->{
            pressPositionX = event.getSceneX();
            pressPositionY = chart.getHeight()-event.getSceneY();  
        });

        data.getNode().setOnMouseDragged(event->{
            data.setXValue(data.getXValue().doubleValue()+event.getSceneX())
            this.pressPositionX);
            data.setYValue(data.getYValue().doubleValue()+event.getSceneY())-this.pressPositionY);

            pressPositionX = event.getSceneX();
            pressPositionY = chart.getHeight()-event.getSceneY();
         });
    }
}

所以我实现了2个方法,onClick获取事件的起点,然后根据事件的位置移动点 有一些改进要做,因为事件的像素距离与图表的比例不匹配,所以它会做坏事,但实际上它有效