概述
(1)、jfreechart是一个优秀的开源chart软件。利用jfreechart可以绘制出各种丰富和优美的图形。但是在jfreechart的图上对于鼠标的支持不很充分,对于鼠标的clicked、moved、pressed、released、entered、exited的事件只支持了两个clicked和moved(不知道为什么?),幸运的是jfreechart是一个开源的软件,可以对于它的实现进行升级,在它传统的功能基础上,实现自己的功能需求。 jfreechart是一个优秀的开源chart软件。利用jfreechart可以绘制出各种丰富和优美的图形。但是在jfreechart的图上对于鼠标的支持不很充分,对于鼠标的clicked、moved、pressed、released、entered、exited的事件只支持了两个clicked和moved(不知道为什么?),幸运的是jfreechart是一个开源的软件,可以对于它的实现进行升级,在它传统的功能基础上,实现自己的功能需求。
(2)、jfreechart中的鼠标事件实现机制为:一是扩展java.util.EventListener接口为ChartMouseListener,在其中定义了chartMouseClicked和chartMouseMoved两个事件响应函数;而是继承java.util.EventObject类生成ChartMouseEvent,在ChartMouseEvent中封装了鼠标事件和Jfreechart的对象,供事件处理函数中应用;三是在jfreechart的ChartPanel中定义了事件监听器队列,当外部程序注册了事件监听器后,在chartpanel中发生定义的事件后,监听器响应响应的事件。
(3)、在jfreechart默认的实现中,对于鼠标事件,只有clicked和moved可以供外部监听,其他事件提供了默认的监听实现,这样就阻碍了外部对jfreechart的更深入的鼠标操作。
(4)、这里为了实现点击折线图拐点,响应事件并做出下一步操作,我是实现了ChartMouseListener接口,实现chartMouseClicked方法
实现代码
(1)、ChartClick.java
package centralcontrol.tool;
import org.jfree.chart.ChartMouseEvent;
import org.jfree.chart.ChartMouseListener;
import org.jfree.chart.entity.ChartEntity;
import centralcontrol.ui.HisVersionSel;
public class ChartClick implements ChartMouseListener{
@Override
public void chartMouseClicked(ChartMouseEvent arg0) {
// TODO Auto-generated method stub
ChartEntity entity = arg0.getEntity();
System.out.println(entity);
}
@Override
public void chartMouseMoved(ChartMouseEvent arg0) {
// TODO Auto-generated method stub
}
}
该类实现了ChartMouseListener接口,chartMouseClicked方法就是点击图标上任意一点都会触发的事件,但是只有当点击拐点时entity才不为空,这里就可以通过判空来解决点击拐点触发事件的操作。
(2)、使用
(1)生成图表(此处以折线图为例)
JFreeChart lineChart = ChartFactory.createLineChart("","","",data,
PlotOrientation.VERTICAL,false,true,false);
(2)获取ChartPanel
ChartPanel chartPanel = new ChartPanel( lineChart );
(3)注册事件
chartPanel.addChartMouseListener(new ChartClick());
以上就是jfreechar折线图注册监听事件的方法。