Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    JFreeChart è possibile rendere "linkabili" le diciture sull'ascissa?

    Ciao a tutti,
    mi rivolgo con questa domanda a chi sicuramente conosce bene JFreeChart perchè la modifica che vorrei apportare è un po complessa...(almeno cosi ritengo che sia.. )...

    avrei bisogno di rendere cliccabili le diciture in basso sull'ascissa...per capirci alla base del mio istogramma...in modo da richiamare il dettaglio di quel determinato elemento in un altra pagina...

    inoltre vorrei sapere se oltre al link posso assegnare sempre alla dicitura un toolTip che mi dia ulteriori dettagli sull'elemento...

    Aggiungo anche che il grafico l'ho già creato, è funzionante, e gira all'interno di un applet inclusa in una pagina jsp...
    per essere più dettagliato possibile posto il codice della mia applet:

    Codice PHP:
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.ChartUtilities;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.axis.CategoryAxis;
    import org.jfree.chart.axis.CategoryLabelPositions;
    import org.jfree.chart.axis.NumberAxis;
    import org.jfree.chart.event.ChartChangeEventType;
    import org.jfree.chart.imagemap.StandardToolTipTagFragmentGenerator;
    import org.jfree.chart.imagemap.ToolTipTagFragmentGenerator;
    import org.jfree.chart.labels.CategoryToolTipGenerator;
    import org.jfree.chart.labels.CustomXYToolTipGenerator;
    import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
    import org.jfree.chart.plot.CategoryPlot;
    import org.jfree.chart.plot.DatasetRenderingOrder;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.renderer.category.BarRenderer;
    import org.jfree.chart.renderer.category.CategoryItemRenderer;
    import org.jfree.chart.renderer.category.LevelRenderer;
    import org.jfree.chart.urls.CategoryURLGenerator;
    import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.category.DefaultCategoryDataset;
    import org.jfree.data.general.DefaultPieDataset;
    import org.jfree.data.xy.XYSeries;
    import org.jfree.data.xy.XYSeriesCollection;

    import java.applet.Applet;
    import java.awt.BasicStroke;
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.Paint;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionListener;
    import java.io.File;
    import java.io.IOException;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.EventListener;
    import java.util.List;

    import javax.swing.JPanel;

    public class 
    Test extends Applet {

        final 
    String legendaDare "Dare";
        final 
    String legendaAvere "Avere";
        final 
    String legendaForecastDare "Forecast Dare";
        final 
    String legendaForecastAvere "Forecast Avere";
        
        
        private static 
    String[] nomiCommesse = new String[10]; 
        private static 
    String[] importiAvere = new String[10]; 
        private static 
    String[] importiDare = new String[10]; 
        private static 
    String[] forecastAvere = new String[10]; 
        private static 
    String[] forecastDare = new String[10]; 

        public 
    void init() {
            
    // It is required but does not need anything.
            
    super.init();
            

        }

        
    // This method gets called when the applet is terminated
        // That's when the user goes to another page or exits the browser.
        
    public void stop() {
            
    // no actions needed here now.
            
    super.stop();
        }

        
    // The standard method that you have to use to paint things on screen
        // This overrides the empty Applet method, you can't called it "display" for example.

        
    public void paint(Graphics g) {
            
    //method to draw text on screen
            // String first, then x and y coordinate.
            // Create a simple XY chart
            
    super.paint(g);
            
            for(
    int i0i<10i++){
                
            
    nomiCommesse[i] = getParameter("nomeCommessa"+i);
            
    importiAvere[i] = getParameter("importoAvere"+i);
            
    importiDare[i] = getParameter("importoDare"+i);
            
    forecastAvere[i] = getParameter("forecastAvere"+i);
            
    forecastDare[i] = getParameter("forecastDare"+i);
            }


            
            
    DefaultCategoryDataset dataset1 = new DefaultCategoryDataset();
            
    DefaultCategoryDataset dataset2 = new DefaultCategoryDataset();
            final 
    CategoryItemRenderer renderer = new BarRenderer();
            final 
    CategoryItemRenderer renderer2 = new LevelRenderer();       
            final 
    CategoryPlot plot = new CategoryPlot();
            
            for (
    int i 0nomiCommesse.lengthi++) {
                
                
    dataset1.addValue(Double.parseDouble(importiAvere[i]), legendaAverenomiCommesse[i]);
                
    dataset1.addValue(Double.parseDouble(importiDare[i]), legendaDarenomiCommesse[i]);        

                
    dataset2.addValue(Double.parseDouble(forecastAvere[i]), legendaForecastAverenomiCommesse[i]);
                
    dataset2.addValue(Double.parseDouble(forecastDare[i]), legendaForecastDarenomiCommesse[i]);
                
            }
          

        
            
    //renderer.setToolTipGenerator(new StandardCategoryToolTipGenerator());
        
            
    renderer2.setSeriesPaint(0Color.GREEN.brighter().brighter());
            
    renderer.setSeriesPaint(0Color.GREEN.darker().darker());
            
    renderer2.setSeriesPaint(1Color.RED.brighter().brighter());
            
    renderer.setSeriesPaint(1Color.RED.darker().darker());
            
            
            
    plot.setDataset(dataset1);
            
    plot.setRenderer(renderer);
            
    NumberAxis ordinata = new NumberAxis("Importo €");
            
    ordinata.configure();
            
    ordinata.setAutoRange(true);///
            
    ordinata.resizeRange(0.0020000.00);///
            
    plot.setDomainAxis(new CategoryAxis("Commesse"));
            
    plot.setRangeAxis(ordinata);///
            
    plot.setOrientation(PlotOrientation.VERTICAL);
            
    plot.setRangeGridlinesVisible(true);
            
    plot.setDomainGridlinesVisible(true);
            
    renderer.setSeriesStroke(0, new BasicStroke(4.00f));
            
    renderer.setSeriesStroke(1, new BasicStroke(4.00f));
            
    renderer2.setSeriesStroke(0, new BasicStroke(4.00f));
            
    renderer2.setSeriesStroke(1, new BasicStroke(4.00f));
            
    plot.setDataset(1dataset2);
            
    plot.setRenderer(1renderer2);
            
    plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD); 
            
    plot.getDomainAxis().setCategoryLabelPositions(CategoryLabelPositions.UP_45);
            
            
            
    plot.setBackgroundPaint(Color.WHITE);
            
    plot.setRangeGridlinePaint(Color.GRAY);
            final 
    JFreeChart chart = new JFreeChart(plot);

            
    chart.setBackgroundPaint(Color.white);
            
    chart.setAntiAlias(true);

            if ( 
    chart!=null ) {
                
    chart.draw( (Graphics2D)g,getBounds()); //repaints the whole chart
            
    }

        }


    Qualcuno sa indicarmi come fare e se ritenete sia possibile farle queste modifiche?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    non lo so.. io l'ho sempre usato per creare il grafico come immagine.. ed essendo un immagine niente tool tip o scritte linkabili.. quindi in parole povere secondo me non puoi farlo..
    potresti creare una piccola legenda tu appena al di sotto dell'immagine però, con i collegamenti che vuoi..
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  3. #3
    è quello che pensavo di fare(la legenda esterna con i link alle varie "voci")...ma ovviamente se si riuscisse a rendere linkabili direttamente le voci dell'ascissa sarebbè molto più gradevole esteticamente.
    Come vedrai io non "appiccico" un immagine nell'html...ma un applet..quindi qualcosa di un pò più dinamico...però sinceramente con le applet non ci so fare molto, non ho tanta esperienza percui non riesco neanche a percepirne i limiti...
    teoricamente un "disegno" fatto tramite applet, potrebbe essere linkabile?.. aldilà che si tratti di jFreeChart o di una semplice stampa a video di una frase(classico esempio online di applet ) ??

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    so poco e nulla di JFreeChart, ma cercando sulla rete ho trovato

    http://cwiki.apache.org/WICKET/jfree...-imagemap.html

    che forse potrebbe esserti utile... però ripeto, non so niente di quella libreria per cui magari ho postato un link a qualcosa del tutto inutile per la tua problematica.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.