如何在散点图上拖动'滴'

时间:2017-01-28 18:25:24

标签: java javafx charts drag-and-drop scatter

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

与以下内容相关的代码:

<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);
控制器中的

1 个答案:

答案 0 :(得分:0)

所以,要在答案中发布代码,如果它对某人每天都有用: 在我的控制器的initialize方法中:

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

所以DnDtoMoveData是一个实习生类,它看起来像这样:

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获取事件的起点,然后根据事件的位置移动点 有一些改进,因为事件的像素距离与图表的比例不匹配所以它会造成不好的事情,但事实上它是有效的