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++;
}
}
}
}événement Java manipulation avec un retard
Le code ci-dessus est utilisé pour créer un graphique et je dois développer quelque chose comme amcharts link
J'ai essayé d'utiliser la minuterie, mais les événements ne sont pas obtenir un retard, quel que soit du retard que j'utilise. Est-ce que quelqu'un peut m'aider à obtenir le délai? Cela n'a rien à voir avec les jcharts. Il s'agit d'une manipulation purement événementielle.
Ce serait bien si vous pouviez organiser le code affiché, utilisez l'environnement de code disponible capable à l'éditeur de questions. – freitass
Deuxième @freitass, c'est aussi plutôt long, viser un SCCEE (http://sscce.org/). Un bref exemple qui montre ce que vous avez essayé avec Timer et comment il n'a pas répondu à vos attentes serait idéal. –
Désolé, je faisais ça – Harish