Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何拖动&x27;n';放在散点图上_Java_Javafx_Charts_Drag And Drop_Scatter - Fatal编程技术网

Java 如何拖动&x27;n';放在散点图上

Java 如何拖动&x27;n';放在散点图上,java,javafx,charts,drag-and-drop,scatter,Java,Javafx,Charts,Drag And Drop,Scatter,我有一个散点图,我希望能够移动这些点,拖动它们 问题是它不像画布,我显然不能使用eventgetX()或getSceneX(),因为存在轴,轴不在同一位置,这取决于场景的大小,因此0/0显然不是根据图表设置的,如果我更改场景的大小,距离:边框/轴也会更改 该守则涉及: //在初始化中,填充图表 双res=0; 对于(double x=fct.getInf();xSo),如果答案中的代码对某人有用,那么发布代码: 在控制器的初始化方法中: chart.getData().get(0).getDa

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

该守则涉及:

//在初始化中,填充图表
双res=0;

对于(double x=fct.getInf();xSo),如果答案中的代码对某人有用,那么发布代码: 在控制器的初始化方法中:

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();
         });
    }
}
公共类DnDToMoveData{
双压位X;
双压位;
DnDToMoveData(数据){
data.getNode().setOnMousePressed(事件->{
按positionx=event.getSceneX();
按positiony=chart.getHeight()-event.getSceneY();
});
data.getNode().setOnMouseDrawed(事件->{
data.setXValue(data.getXValue().doubleValue()+event.getSceneX())
点击此按钮(X);
data.setYValue(data.getYValue().doubleValue()+event.getSceneY())-this.pressPositionY);
按positionx=event.getSceneX();
按positiony=chart.getHeight()-event.getSceneY();
});
}
}
所以我实现了两个方法,onClick获取事件的起点,然后根据事件的位置移动该点
还有一些改进需要做,因为事件的像素距离与图表的比例不匹配,因此会造成不好的结果,但事实上它是有效的

发布代码并不是为了让我们知道您已经完成了作业(与流行的观点相反,这实际上是一个主要面向专业程序员的网站,而不是为解决家庭作业问题的人提供的,当然这里欢迎任何人提问);这样,我们就有了一个起点来理解您所坚持的内容。这段代码没有多大帮助;这个处理程序是注册到哪个节点的?如果是图表本身,如果您使用每个数据点的节点注册处理程序不是更容易吗?@James_D这不是我的家庭作业,正如我每天看到的,它不是“专业程序员”在这里参加的人,不仅仅是各地的人询问他们的工作,这是一个8个月的项目,我向社区询问了一点,代表了我项目的20%方法在这里被称为:
你说“我在做一个学校项目”。但我的观点不是关于项目,我的观点是关于让您发布代码的目的。请阅读帮助页,尤其是。将数据添加到系列后,调用并设置返回结果的处理程序。然后,当拖动节点时,您可以更新数据值。@James\u D非常感谢,这是缺少的键对于我的理解,我肯定会发布一些代码来回答当这将完全工作,但我现在非常接近,再次感谢
//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));
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();
         });
    }
}