JFreeChart选择多个点- 鼠标拖动 - 套索 - Java

3
我使用Java中的JFreeChart绘制一个包含50多个x、y坐标点的XYLineChart。图表在我的JFrame的一个JPanel中的ChartPanel中。我知道JFreeChart已经内置了缩放功能,即在鼠标点击和拖动时,它会缩放并显示所选“拖动”区域下的点。但是,我想知道是否有任何方法在按下CTRL、ALT或SHIFT键的同时缩放,让它返回所选区域内点的x、y坐标。也就是说,如果用户单击图表上的某个点,然后拖动鼠标,它应该像往常一样进行缩放。但是,如果用户单击某个点并同时按住SHIFT或ALT或CTRL键拖动,我们应该得到选择在图表上拖动区域下面的所有点的列表。这可能吗?请告诉我如何处理。 我尝试为ChartPanel添加一个简单的MouseListener来检测鼠标何时被按下和释放,但鼠标事件返回的x、y位置值对应于屏幕上的点击位置而不是图表上点的实际坐标。我需要用户单击并拖动鼠标时所有点的实际坐标,以便计算鼠标何时被按下和拖动,以及鼠标何时被释放,并使用该信息选择拖动区域下面的多个点。如果有任何想法,请告诉我。

抱歉在多个地方发布此问题,但我已经苦苦挣扎了一段时间,希望有人能给我一些关于如何解决这个问题的想法。 - Ajit Singh
我尝试在旧版本的JFreeChart:JFreeChart 1.0.16中实现此功能,但无法做到。我可以在我的ChartPanel上使用ChartMouseListener来获取单击时点的x、y值。然而,为了实现我想要的(选择多个点并显示它们的绘制x、y值),我需要在ChartPanel上有一个常规的MouseListener,它将使用mousePressed()和mouseReleased(),这些都使用MouseEvent而不是ChartMouseEvent。如何使用MouseListener获取实际绘制的x、y值而不是屏幕上的x、y点? - Ajit Singh
没有问题可以跨帖; 链接让其他人知道已有的答案。 - trashgod
2个回答

4
如何使用 MouseListener 获取实际绘制的 x、y 值而不是屏幕上的 x、y 点?
添加一个 ChartMouseListener,如此处所示 (链接)(链接)
JFreeChart 之外,使用套索进行多重选择的示例见(链接),其中显示了一个蚂蚁行进矩形,如此处所示(链接)

嗨,感谢回复。但是,我想知道如何使用常规的MouseListener获取绘制的x、y值。我知道可以通过ChartMouseListener(通过ChartMouseEvent)来做到这一点,但它只有两种方法:mouseClicked()和mouseMoved(),我想使用MouseListener的MouseEvent和mousePressed()及mouseReleased()方法来找出鼠标开始拖动的位置和拖动的结束位置。这样,我就可以得到该水平范围内的所有点,然后检索和选择它们,从而创建一个套索效果。有没有办法实现这个? - Ajit Singh
有没有办法实现我上面提到的功能?由于在普通的MouseListener中使用ChartMouseEvent而不是MouseEvent,或者创建一个在鼠标按下或释放时调用的自定义方法(例如MouseListener的mousePressed()、mouseReleased()方法)都是不可能的,唯一可能的解决方案是在标准的MouseListener中计算实际绘制的x、y值(基于我们图表的x、y轴值),而不是根据屏幕尺寸返回x、y。如何做到这一点? - Ajit Singh
您可以使用 getTrigger() 查看原始事件,如此处所建议的 here - trashgod

4

以下是我在JFreeChart论坛上的回答:

JFreeChart 1.0.17版本中没有实现此功能,但是在GitHub上的JFreeChart-FSE(“future state edition”)项目中已经实现了该功能:

https://github.com/jfree/jfreechart-fse

目前尚未发布此存储库的版本,但您可以从源代码构建它。欢迎提供反馈,最近我没有时间去处理这个问题,但我希望在未来几个月内从此存储库发布一个版本(我的目标是在2014年推出JFreeChart 2.0)。Lasso选择是我几年前编写的一些代码,但KNIME.org的Michael Zinsmaier已经完成了大量工作来对其进行结构化并确定数据集选择状态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接