怎么用Jfreechar实现鼠标放上去就显示交点上的数据
时间: 2024-03-05 17:54:24 浏览: 62
要实现鼠标放上去就显示交点上的数据,可以使用 JFreeChart 的 ChartMouseListener 接口。具体实现步骤如下:
1. 创建一个 ChartPanel 对象,并添加到 JFrame 中。
2. 实现 ChartMouseListener 接口,并重写 chartMouseClicked() 和 chartMouseMoved() 方法。
3. 在 chartMouseClicked() 方法中,获取鼠标点击的坐标点,然后使用 ChartRenderingInfo 对象获取到对应的数据点。
4. 在 chartMouseMoved() 方法中,获取鼠标移动的坐标点,然后使用 ChartRenderingInfo 对象获取到对应的数据点,并将其显示在 Tooltip 中。
以下是示例代码:
```
public class MyChartMouseListener implements ChartMouseListener {
private ChartPanel chartPanel;
public MyChartMouseListener(ChartPanel chartPanel) {
this.chartPanel = chartPanel;
}
@Override
public void chartMouseClicked(ChartMouseEvent event) {
ChartEntity entity = event.getEntity();
if (entity instanceof XYItemEntity) {
XYItemEntity itemEntity = (XYItemEntity) entity;
XYDataset dataset = itemEntity.getDataset();
int seriesIndex = itemEntity.getSeriesIndex();
int itemIndex = itemEntity.getItem();
double x = dataset.getXValue(seriesIndex, itemIndex);
double y = dataset.getYValue(seriesIndex, itemIndex);
// 显示数据点
JOptionPane.showMessageDialog(chartPanel, "X: " + x + ", Y: " + y);
}
}
@Override
public void chartMouseMoved(ChartMouseEvent event) {
ChartEntity entity = event.getEntity();
if (entity instanceof XYItemEntity) {
XYItemEntity itemEntity = (XYItemEntity) entity;
XYDataset dataset = itemEntity.getDataset();
int seriesIndex = itemEntity.getSeriesIndex();
int itemIndex = itemEntity.getItem();
double x = dataset.getXValue(seriesIndex, itemIndex);
double y = dataset.getYValue(seriesIndex, itemIndex);
// 显示 Tooltip
chartPanel.setToolTipText("X: " + x + ", Y: " + y);
} else {
chartPanel.setToolTipText(null);
}
}
}
```
使用方法:
```
JFreeChart chart = ...; // 创建 Chart 对象
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.addChartMouseListener(new MyChartMouseListener(chartPanel));
JFrame frame = new JFrame("MyChart");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(chartPanel);
frame.pack();
frame.setVisible(true);
```
阅读全文