I am really to this library and i am facing an issue were the cpu will become 100% after updating my data.
i have 5 subplots each has 4 dataset and all will be updated at the same time.
i have a XYLineAndShapeRenderer for each subplot also i tried SamplingXYLineRenderer and StandardXYItemRenderer none helped.
i am also limiting my data to 1 hour i am refreshing every 1sec. and i am calling chart.setNotify(false); and chart.setNotify(true); before and after i update my data set.
Please help!
Code: Select all
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CombinedDomainXYPlot;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.SamplingXYLineRenderer;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
public class RealWindow extends javax.swing.JFrame implements ActionListener {
/** The number of subplots. */
public static final int SUBPLOT_COUNT = 5;
public static final int PORT_NUM = 4;
/** The datasets. */
private TimeSeriesCollection[] datasets;
double [][] arrayValue = new double [SUBPLOT_COUNT][PORT_NUM];
JFreeChart chart;
//SamplingXYLineRenderer myNewRenderer;
public RealWindow() {
XYLineAndShapeRenderer[] myNewRenderer = new XYLineAndShapeRenderer [SUBPLOT_COUNT];
final CombinedDomainXYPlot plot = new CombinedDomainXYPlot(new DateAxis("Time"));
this.datasets = new TimeSeriesCollection[SUBPLOT_COUNT];
XYPlot[] myPlot = new XYPlot [SUBPLOT_COUNT];
String[] title= {"E","D","C","B","A"};
for (int i = 0; i < SUBPLOT_COUNT; i++) {
myRenderer[i] = new StandardXYItemRenderer ();
myNewRenderer[i]=new XYLineAndShapeRenderer(true,false);
myNewRenderer[i].setSeriesPaint(0, Color.RED);
myNewRenderer[i].setSeriesPaint(1, Color.GREEN);
myNewRenderer[i].setSeriesPaint(2, Color.BLUE);
myNewRenderer[i].setSeriesPaint(3, Color.ORANGE);
this.datasets[i] = createDataset ("port");
final NumberAxis rangeAxis = new NumberAxis(title[i]);
rangeAxis.setAutoRangeIncludesZero(true);
myPlot[i] = new XYPlot(
this.datasets[i], null, rangeAxis,myNewRenderer[i]);
myPlot[i].setBackgroundPaint(Color.lightGray);
myPlot[i].setDomainGridlinePaint(Color.white);
myPlot[i].setRangeGridlinePaint(Color.white);
plot.add(myPlot[i]);
}
for (int i = 0;i<SUBPLOT_COUNT;i++)
{
for (int j =0;j<datasets[i].getSeriesCount();j++)
{
this.arrayValue[i][j]=0;
this.datasets[i].getSeries(j).setMaximumItemCount (1000);
}
}
chart = new JFreeChart("Real Time Data", plot);
chart.setBorderPaint(Color.black);
chart.setBorderVisible(true);
chart.setBackgroundPaint(Color.white);
chart.removeLegend();
chart.addLegend(new LegendTitle(myPlot[0]));
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
final ValueAxis axis = plot.getDomainAxis();
axis.setAutoRange(true);
axis.setFixedAutoRange(300000.0); // 60000.060 seconds3000000.0
final JPanel content = new JPanel(new BorderLayout());
final ChartPanel chartPanel = new ChartPanel(chart);
final JButton button = new JButton("Clear Data");
button.setActionCommand("Clear");
button.addActionListener(this);
content.add(button, BorderLayout.SOUTH);
content.add(chartPanel);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 470));
chartPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
setContentPane(content);
pack();
}
public void actionPerformed(final ActionEvent e) {
if (e.getActionCommand().equals("Clear")) {
for (int i = 0;i<SUBPLOT_COUNT;i++)
{
for (int j =0;j<datasets[i].getSeriesCount();j++)
{
this.datasets[i].getSeries(j).clear();
}
}
}
}
private TimeSeriesCollection createDataset(String name) {
TimeSeries [] series = new TimeSeries [PORT_NUM];
final TimeSeriesCollection collection = new TimeSeriesCollection();
for (int j = 0;j <PORT_NUM;j++)
{
series [j] = new TimeSeries(name+""+j, Millisecond.class);
collection.addSeries(series [j]);
}
return collection;
}
public void updateAllCharts () {
final Millisecond now = new Millisecond();
chart.setNotify(false) ;
// System.out.println("Now = " + now.toString());
for (int i = 0;i<SUBPLOT_COUNT;i++)
{
for (int j =0;j<datasets[i].getSeriesCount();j++)
{
this.datasets[i].getSeries(j).addOrUpdate(new Millisecond(), this.arrayValue[i][j]);
}
}
chart.setNotify(true);
}
}