JFreeChart 点击图表XY系列坐标
JFreeChart XY-series coordinates by clicking the chart
当用户单击 JFreeChart 提供的 XY 系列图表的点之一时,我试图分别获取 x 和 y 坐标。此外,我正在使用 Java 编程语言在 servlet 中执行此操作。 List
是我从模型包中制作的对象,该模型包具有 类 称为 Home
和 Away
。请随时询问有关 servlet 的更多信息,因为我在下面提供了代码。
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Object saved in application scopes two list one fore Home and Away
List<Home> forumi = (List<Home>) getServletContext().getAttribute(
"home" );
List<Away> forumi2 = (List<Away>) getServletContext().getAttribute(
"away" );
OutputStream out = response.getOutputStream();
try {
//creating an XY dataset
XYSeriesCollection dataset = new XYSeriesCollection();
XYSeries series1 = new XYSeries("Home");
XYSeries series2 = new XYSeries("Away");
//inputing data to chart
int counter = 1;
for(int i=0; i < forumi.size(); i++) {
series1.add(counter, forumi.get(i).getScores());
++counter;
}
int counter2 = 1;
for(int i=0; i < forumi2.size(); i++) {
series2.add(counter2, forumi2.get(i).getScores());
++counter2;
}
dataset.addSeries(series1);
dataset.addSeries(series2);
/* create chart */
String chartTitle = "2019-2020";
String xAxisLabel = "game";
String yAxisLabel = "Scores";
JFreeChart chart = ChartFactory.createXYLineChart(chartTitle,
xAxisLabel, yAxisLabel, dataset);
//Customize chart
XYPlot plot = chart.getXYPlot();
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
// sets thickness for series (using strokes)
renderer.setSeriesPaint(0, Color.RED);
renderer.setSeriesPaint(1, Color.BLUE);
// sets paint color for each series
renderer.setSeriesStroke(0, new BasicStroke(2.0f));
renderer.setSeriesStroke(1, new BasicStroke(2.0f));
//renderer.setSeriesStroke(1, new BasicStroke(3.0f));
plot.setRenderer((XYItemRenderer) renderer);
chartPanel = new ChartPanel(chart);
//System.out.print(plot.getRangeCrosshairValue());
chart.getPlot().setBackgroundPaint(Color.WHITE);
/* Set the HTTP Response Type */
response.setContentType("image/png");
/* Writes a chart to an output stream in PNG format */
ChartUtilities.writeChartAsPNG(out, chart, 1704, 300);
} catch (Exception e) {
System.err.println(e.toString()); /* Throw exceptions to log files */
} finally {
out.close();/* Close the output stream */
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} ```
如此 example, you can create an HTML image map 所示,对应于图表中用于 servlet 上下文的实体。
在您选择的 ChartFactory
中将 tooltips
设置为 true
会添加一个 StandardXYToolTipGenerator
,它将在鼠标移动事件上显示工具提示;将鼠标悬停在 scatter.html
中的实体上以查看效果;您可以自定义生成器,如图所示 here and here.
在您选择的 ChartFactory
中将 urls
设置为 true
添加一个 StandardXYURLGenerator
,它将在鼠标单击事件中打开生成的 URL;使用自定义生成器点击 scatter.html
中的实体以查看效果:
chart.getXYPlot().getRenderer().setURLGenerator(new StandardXYURLGenerator(){
@Override
public String generateURL(XYDataset dataset, int series, int item) {
return "http://example.com";
}
});
对于 dataset
、series
和 item
.
的特定值,您的实际生成器可以 return 任何所需的 URL
当用户单击 JFreeChart 提供的 XY 系列图表的点之一时,我试图分别获取 x 和 y 坐标。此外,我正在使用 Java 编程语言在 servlet 中执行此操作。 List
是我从模型包中制作的对象,该模型包具有 类 称为 Home
和 Away
。请随时询问有关 servlet 的更多信息,因为我在下面提供了代码。
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Object saved in application scopes two list one fore Home and Away
List<Home> forumi = (List<Home>) getServletContext().getAttribute(
"home" );
List<Away> forumi2 = (List<Away>) getServletContext().getAttribute(
"away" );
OutputStream out = response.getOutputStream();
try {
//creating an XY dataset
XYSeriesCollection dataset = new XYSeriesCollection();
XYSeries series1 = new XYSeries("Home");
XYSeries series2 = new XYSeries("Away");
//inputing data to chart
int counter = 1;
for(int i=0; i < forumi.size(); i++) {
series1.add(counter, forumi.get(i).getScores());
++counter;
}
int counter2 = 1;
for(int i=0; i < forumi2.size(); i++) {
series2.add(counter2, forumi2.get(i).getScores());
++counter2;
}
dataset.addSeries(series1);
dataset.addSeries(series2);
/* create chart */
String chartTitle = "2019-2020";
String xAxisLabel = "game";
String yAxisLabel = "Scores";
JFreeChart chart = ChartFactory.createXYLineChart(chartTitle,
xAxisLabel, yAxisLabel, dataset);
//Customize chart
XYPlot plot = chart.getXYPlot();
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
// sets thickness for series (using strokes)
renderer.setSeriesPaint(0, Color.RED);
renderer.setSeriesPaint(1, Color.BLUE);
// sets paint color for each series
renderer.setSeriesStroke(0, new BasicStroke(2.0f));
renderer.setSeriesStroke(1, new BasicStroke(2.0f));
//renderer.setSeriesStroke(1, new BasicStroke(3.0f));
plot.setRenderer((XYItemRenderer) renderer);
chartPanel = new ChartPanel(chart);
//System.out.print(plot.getRangeCrosshairValue());
chart.getPlot().setBackgroundPaint(Color.WHITE);
/* Set the HTTP Response Type */
response.setContentType("image/png");
/* Writes a chart to an output stream in PNG format */
ChartUtilities.writeChartAsPNG(out, chart, 1704, 300);
} catch (Exception e) {
System.err.println(e.toString()); /* Throw exceptions to log files */
} finally {
out.close();/* Close the output stream */
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} ```
如此 example, you can create an HTML image map 所示,对应于图表中用于 servlet 上下文的实体。
在您选择的 ChartFactory
中将 tooltips
设置为 true
会添加一个 StandardXYToolTipGenerator
,它将在鼠标移动事件上显示工具提示;将鼠标悬停在 scatter.html
中的实体上以查看效果;您可以自定义生成器,如图所示 here and here.
在您选择的 ChartFactory
中将 urls
设置为 true
添加一个 StandardXYURLGenerator
,它将在鼠标单击事件中打开生成的 URL;使用自定义生成器点击 scatter.html
中的实体以查看效果:
chart.getXYPlot().getRenderer().setURLGenerator(new StandardXYURLGenerator(){
@Override
public String generateURL(XYDataset dataset, int series, int item) {
return "http://example.com";
}
});
对于 dataset
、series
和 item
.