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.
you are doing the logic that your timer listener should be performing in the constructor of your Rotator. this way you immediately perform the action without the delay. you also dont have anything that is listening for timer events.
instead, you should have your PieChartDemo implement
ActionListener
and have it do your timer processing:or something like that.
you will also need to pass in your ActionListener to the constructor:
old:
new:
here is a good tutorial on swing timers
Your mouse event handler is never releasing the CPU. The Rotator is not causing the thread to sleep so the whole delay happens as soon as the mouse event is handled.