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.
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
Post a Comment