Координаты JFreeChart XY-серии, нажав на график - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь получить координаты x и y индивидуально, когда пользователь нажимает на одну из точек графиков серии XY, которые предоставляет JFreeChart. Также я делаю это в сервлете, используя Java язык программирования. List - это объекты, которые я сделал из пакета модели, в котором есть классы с именами Home и Away. Не стесняйтесь спрашивать больше информации о сервлете, поскольку я предоставляю код ниже.

    /**
     * @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);
    } ```

1 Ответ

1 голос
/ 29 апреля 2020

Как показано в этом примере , вы можете создать HTML карту изображения , соответствующую объектам в вашей диаграмме, для использования в контексте сервлета.

Установка tooltips в true в выбранном вами ChartFactory добавляет StandardXYToolTipGenerator, который будет показывать подсказку о событиях перемещения мыши; наведите курсор мыши на объекты в scatter.html, чтобы увидеть эффект; Вы можете настроить генератор, как показано здесь и здесь .

Установка urls в true в выбранном вами ChartFactory добавляет StandardXYURLGenerator, который будет открыть сгенерированный URL на событиях, на которые нажали кнопки мыши; щелкните объект в scatter.html с помощью специального генератора, чтобы увидеть эффект:

chart.getXYPlot().getRenderer().setURLGenerator(new StandardXYURLGenerator(){
    @Override
    public String generateURL(XYDataset dataset, int series, int item) {
        return "http://example.com";
    }
});

Фактический генератор может вернуть любой желаемый URL-адрес для определенных значений dataset, series и item.

...