如何在散点图上拖放
Posted
技术标签:
【中文标题】如何在散点图上拖放【英文标题】:How to drag'n'drop on a scatter chart 【发布时间】:2017-06-14 06:32:42 【问题描述】:我有一个散点图,我希望能够移动点,拖动它们
问题是它不像画布,我显然不能使用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);
在控制器中
【问题讨论】:
发布代码并不是为了让我们知道你已经完成了你的作业(与流行的看法相反,这实际上是一个主要针对专业程序员的网站,当然不是为了解决作业问题的人欢迎任何人在这里提问);这样我们就有了一个起点来了解您所坚持的。这个 sn-p 没有多大帮助;这个处理程序注册到哪个节点?如果是图表本身,如果您使用每个数据点的节点注册处理程序会不会更容易? @James_D 这不是我的作业,正如我每天看到的那样,来这里的不是“专业程序员”,不仅很清楚这是世界各地的人在询问他们的工作,这是一个为期 8 个月的项目,我在某一点上询问社区,约占我项目的 20% 该方法在这里调用:<ScatterChart fx:id="chart" onDragDetected="#chartDragDetected"
所以在图表上是的,我不明白你的意思,在每一点上?它是 Datadata.getNode()
并将处理程序设置为返回的结果。然后可以在拖动节点时更新数据的值。
@James_D 非常感谢,这是我理解的关键,当它完全工作时,我肯定会发布一些代码作为答案,但我现在已经很近了,再次感谢跨度>
【参考方案1】:
所以,发布答案中的代码,如果它可能对某人有用的话: 在我的控制器的初始化方法中:
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获取事件的起点,然后根据事件的位置移动点 有一些改进要做,因为事件的像素距离与图表的比例不匹配,所以它做坏事,但实际上它有效
【讨论】:
以上是关于如何在散点图上拖放的主要内容,如果未能解决你的问题,请参考以下文章