import java.awt.Color; import java.awt.Dimension;
import javax.swing.JPanel;
import javax.swing.Timer;
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.entity.ChartEntity;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
/**
* A simple demonstration application showing how to create a pie chart using
* data from a {@link DefaultPieDataset}.
*/
public class PieChartDemo1 extends ApplicationFrame implements ChartMouseListener {
private JFreeChart chart;
private PiePlot plot;
private int angle=270;
private static double explodePercent = 0.99;
private static long count=0;
/**
* Default constructor.
*
* @param title the frame title.
*/
public PieChartDemo1(String title) {
super(title);
this.chart = ChartFactory.createPieChart(
"Pie Chart Demo 1", // chart title
createDataset(), // data
true, // include legend
true,
false
);
this.plot = (PiePlot) chart.getPlot();
this.plot.setSectionOutlinesVisible(false);
this.plot.setNoDataMessage("No data available");
this.plot.setBackgroundAlpha(0.2f);
this.plot.setBackgroundPaint(Color.WHITE);
this.plot.setExplodePercent("One",.99);
this.angle=270;
ChartPanel chartpanel = new ChartPanel(chart, false, false, false, false, false);
chartpanel.setVisible(true);
chartpanel.addChartMouseListener(this);
chartpanel.setPreferredSize(new Dimension(500, 270));
setContentPane(chartpanel);
}
/**
* Creates a sample dataset.
*
* @return A sample dataset.
*/
private static PieDataset createDataset() {
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("One", new Double(43.2));
dataset.setValue("Two", new Double(10.0));
dataset.setValue("Three", new Double(27.5));
dataset.setValue("Four", new Double(17.5));
dataset.setValue("Five", new Double(11.0));
dataset.setValue("Six", new Double(19.4));
return dataset;
}
/**
* Creates a chart.
*
* @param dataset the dataset.
*
* @return A chart.
*/
private static JFreeChart createChart(PieDataset dataset) {
JFreeChart chart = ChartFactory.createPieChart3D(
"Pie Chart Demo 1", // chart title
dataset, // data
true, // include legend
true,
false
);
PiePlot plot = (PiePlot) chart.getPlot();
plot.setSectionOutlinesVisible(false);
plot.setNoDataMessage("No data available");
plot.setBackgroundAlpha(0.2f);
return chart;
}
/**
* Creates a panel for the demo (used by SuperDemo.java).
*
* @return A panel.
*/
public static JPanel createDemoPanel() {
JFreeChart chart = createChart(createDataset());
ChartPanel chartpanel = new ChartPanel(chart, false, false, false, false, false);
chartpanel.setVisible(true);
chartpanel.setPreferredSize(new Dimension(500, 270));
return new JPanel();
}
/**
* Starting point for the demonstration application.
*
* @param args ignored.
*/
public static void main(String[] args) {
PieChartDemo1 demo = new PieChartDemo1("Pie Chart Demo 1");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
public void chartMouseClicked(ChartMouseEvent chartmouseevent)
{
ChartEntity chartentity = chartmouseevent.getEntity();
if (chartentity != null){
this.plot.setStartAngle(angle);
this.angle=angle+5;
this.plot.setStartAngle(angle);
this.plot.setExplodePercent("One", .8);
System.out.println("Mouse clicked: " + chartentity.toString());
}
else
System.out.println("Mouse clicked: null entity.");
}
public void chartMouseMoved(ChartMouseEvent chartmouseevent)
{
int i = chartmouseevent.getTrigger().getX();
int j = chartmouseevent.getTrigger().getY();
ChartEntity chartentity = chartmouseevent.getEntity();
if (chartentity != null)
{
//this.plot.setStartAngle(angle);
//this.angle=angle-5;
//this.plot.setStartAngle(angle);
System.out.println("Explode Percent is "+plot.getExplodePercent("One"));
Rotator rotator=new Rotator(plot);
rotator.setInitialDelay(10000000);
rotator.setDelay(100000000);
rotator.start();
//System.out.println("Mouse moved: " + i + ", " + j + ": " + chartentity.toString());
}
//else
//System.out.println("Mouse moved: " + i + ", " + j + ": null entity.");
}
static class Rotator extends Timer {
/** The plot. */
private PiePlot plot;
/** The angle. */
private int X,Y;
/**
* Constructor.
*
* @param plot the plot.
*/
Rotator(final PiePlot plot) {
super(100,null);
this.plot = plot;
while(count<999999999&&explodePercent>=0){
if(explodePercent>0)
explodePercent=explodePercent-.0001;
else
explodePercent=explodePercent+.0001;
plot.setExplodePercent("One", explodePercent);
count++;
}
}
}
}
The above code is used to create a chart and I have to develop something like amcharts link
I tried using Timer but the events are not getting delayed irrespective of the delay I use.Can anyone help me in getting the delay? This has nothing to with Jcharts though.This is purely event handling.