JFreeChart 折线图中,鼠标移动上去显示坐标信息。
时间: 2024-02-24 22:54:15 浏览: 17
要在 JFreeChart 折线图中实现鼠标移动上去显示坐标信息,可以使用 ChartMouseListener 接口和 ChartPanel 类。具体步骤如下:
1. 创建 ChartMouseListener 接口的实现类,重写 chartMouseMoved 方法,在该方法中获取鼠标所在的坐标值,并将其显示在界面上。
2. 创建 ChartPanel 对象,并添加 ChartMouseListener 实现类的实例到 ChartPanel 中。
3. 将 ChartPanel 对象添加到界面中。
下面是一个示例代码,演示如何在 JFreeChart 折线图中实现鼠标移动上去显示坐标信息:
```java
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartMouseEvent;
import org.jfree.chart.ChartMouseListener;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
public class LineChartDemo extends JFrame {
public LineChartDemo(String title) {
super(title);
// 创建数据集
XYDataset dataset = createDataset();
// 创建图表
JFreeChart chart = createChart(dataset);
// 创建 ChartPanel 对象
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(500, 300));
chartPanel.addChartMouseListener(new MyChartMouseListener(chartPanel));
// 添加 ChartPanel 到界面中
getContentPane().add(chartPanel, BorderLayout.CENTER);
}
private XYDataset createDataset() {
XYSeries series = new XYSeries("Random Data");
for (int i = 0; i < 100; i++) {
series.add(i, Math.random() * 100);
}
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
return dataset;
}
private JFreeChart createChart(XYDataset dataset) {
// 创建图表
JFreeChart chart = ChartFactory.createXYLineChart(
"Line Chart Demo", // chart title
"X", // x axis label
"Y", // y axis label
dataset, // data
null, // no legend
true, // tooltips
false // no URLs
);
// 设置背景颜色
chart.setBackgroundPaint(Color.white);
// 获取图表的绘图区域
XYPlot plot = (XYPlot) chart.getPlot();
// 设置绘图区域的背景颜色
plot.setBackgroundPaint(Color.lightGray);
// 设置绘图区域的网格线颜色
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
// 设置绘图区域的轴线颜色
plot.setDomainAxis(new NumberAxis());
plot.setRangeAxis(new NumberAxis());
plot.getDomainAxis().setLabelPaint(Color.white);
plot.getRangeAxis().setLabelPaint(Color.white);
// 设置绘图区域的线条颜色
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
renderer.setSeriesPaint(0, Color.blue);
renderer.setSeriesShapesVisible(0, true);
plot.setRenderer(renderer);
return chart;
}
private class MyChartMouseListener implements ChartMouseListener {
private ChartPanel chartPanel;
public MyChartMouseListener(ChartPanel chartPanel) {
this.chartPanel = chartPanel;
}
public void chartMouseClicked(ChartMouseEvent event) {
// do nothing
}
public void chartMouseMoved(ChartMouseEvent event) {
int x = event.getTrigger().getX();
int y = event.getTrigger().getY();
double chartX = chartPanel.getChart().getXYPlot().getDomainAxis().java2DToValue(x, chartPanel.getScreenDataArea());
double chartY = chartPanel.getChart().getXYPlot().getRangeAxis().java2DToValue(y, chartPanel.getScreenDataArea());
System.out.println("x=" + chartX + ", y=" + chartY);
}
}
public static void main(String[] args) {
LineChartDemo demo = new LineChartDemo("Line Chart Demo");
demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
demo.pack();
demo.setVisible(true);
}
}
```
这样,在鼠标移动到折线图上时,就会在控制台输出当前鼠标所在的坐标值。你可以根据实际需求,将坐标值显示在界面的合适位置上。