我有一个散点图,我希望能够移动点,拖动它们
问题是它不像画布,我显然不能使用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);
控制器中的
答案 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获取事件的起点,然后根据事件的位置移动点 有一些改进,因为事件的像素距离与图表的比例不匹配所以它会造成不好的事情,但事实上它是有效的