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();
});
}
}