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:
Qualcuno sa indicarmi come fare e se ritenete sia possibile farle queste modifiche?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 i= 0; i<10; i++){
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 = 0; i < nomiCommesse.length; i++) {
dataset1.addValue(Double.parseDouble(importiAvere[i]), legendaAvere, nomiCommesse[i]);
dataset1.addValue(Double.parseDouble(importiDare[i]), legendaDare, nomiCommesse[i]);
dataset2.addValue(Double.parseDouble(forecastAvere[i]), legendaForecastAvere, nomiCommesse[i]);
dataset2.addValue(Double.parseDouble(forecastDare[i]), legendaForecastDare, nomiCommesse[i]);
}
//renderer.setToolTipGenerator(new StandardCategoryToolTipGenerator());
renderer2.setSeriesPaint(0, Color.GREEN.brighter().brighter());
renderer.setSeriesPaint(0, Color.GREEN.darker().darker());
renderer2.setSeriesPaint(1, Color.RED.brighter().brighter());
renderer.setSeriesPaint(1, Color.RED.darker().darker());
plot.setDataset(dataset1);
plot.setRenderer(renderer);
NumberAxis ordinata = new NumberAxis("Importo €");
ordinata.configure();
ordinata.setAutoRange(true);///
ordinata.resizeRange(0.00, 20000.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(1, dataset2);
plot.setRenderer(1, renderer2);
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
}
}
}
Grazie

)...
Rispondi quotando
