java - Rendering Swing component smoothly every 500 millisecond -


i facing rendering problem when call paintcomponent() every 500 millisecond show updated charts. have around 30 barcharts created using jfreechart on panel.

rendering error and how can solve problem?

private void showgraphs() {     firstchart.removeall();    secondchart.removeall();    thirdchart.removeall();    firstchart.add(label1);    secondchart.add(label2);    thirdchart.add(label3);     chartupdate(p1,firstchart);    chartupdate(p2,secondchart);    chartupdate(p3,thirdchart);    //firstchart, secondchart, thirdchart jpanels    //tabb jtabbedpane    paintcomponents(tabb.getgraphics()); } 

this code called every 500 milliseconds , chartupdate(myobject, panel) chart building function on panel using myobject's info.

don't replace view component. instead, update corresponding model , listening view update in response. in example below, each chartpanel returned createpane() has swing timer updates xyseries every 500 ms.

image

import java.awt.borderlayout; import java.awt.dimension; import java.awt.eventqueue; import java.awt.gridlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.util.random; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.timer; import org.jfree.chart.chartfactory; import org.jfree.chart.chartpanel; import org.jfree.chart.jfreechart; import org.jfree.chart.plot.plotorientation; import org.jfree.data.xy.xyseries; import org.jfree.data.xy.xyseriescollection;  /**  * @see http://stackoverflow.com/a/38512314/230513  * @see http://stackoverflow.com/a/15715096/230513  * @see http://stackoverflow.com/a/11949899/230513  */ public class test {      private static final int n = 128;     private static final random random = new random();     private int n = 1;      private void display() {         jframe f = new jframe("tabchart");         f.setdefaultcloseoperation(jframe.exit_on_close);         jpanel p = new jpanel(new gridlayout(0, 1));         (int = 0; < 3; i++) {             p.add(createpane());         }         f.add(p, borderlayout.center);         f.pack();         f.setlocationrelativeto(null);         f.setvisible(true);     }      private chartpanel createpane() {         final xyseries series = new xyseries("data");         (int = 0; < random.nextint(n) + n / 2; i++) {             series.add(i, random.nextgaussian());         }         xyseriescollection dataset = new xyseriescollection(series);         new timer(500, new actionlistener() {              @override             public void actionperformed(actionevent e) {                 series.add(series.getitemcount(), random.nextgaussian());             }         }).start();         jfreechart chart = chartfactory.createxylinechart("test", "domain",             "range", dataset, plotorientation.vertical, false, false, false);         return new chartpanel(chart) {             @override             public dimension getpreferredsize() {                 return new dimension(480, 240);             }         };     }      public static void main(string[] args) {         eventqueue.invokelater(new runnable() {             @override             public void run() {                 new test().display();             }         });     } } 

Comments