View Single Post
  (#1 (permalink)) Old
anirudh_kaki@yahoo.com anirudh_kaki@yahoo.com is offline
Member
 
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
Join Date: May 2009
Lightbulb how to repaint cavas dynamiclly with respect to TIMER - 06-26-2009, 08:12 AM

hi,

i had a canvas which consists of xy-chart which had both line and shape render.
my chart is a dynamic one for every sec some set of points will come , so enitre chart need to be redraw w.r.t timer .

My issue is here package org.jfree.chart.demo;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;



import javax.swing.Timer;


/**
* A simple demonstration of the {@link XYLineAndShapeRenderer} class.
*/
public class TestDynChart1 extends ApplicationFrame {

private RealTimeXYDataset dataset;
Shell shell;
static TestDynChart1 demo;
private JFreeChart chart;
ChartComposite composite;
private int counter = 0;

public TestDynChart1(String title) {

super(title);
final Display display = new Display();
shell = new Shell(display);
shell.setSize(720, 500);
shell.setLayout(new FillLayout());
dataset = createDataset();
chart = createRTChart(dataset);
// Note: must enable using buffer. Otherwise, only two points are drawn.
composite = new ChartComposite(shell, SWT.NONE, chart, true);

shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
if (shell.isDisposed()) {
System.exit(0);
}
}
}

public void refresh() {
dataset.updateValue();
counter++;

// adjust range
XYPlot plot = (XYPlot) chart.getPlot();
ValueAxis xaxis = plot.getDomainAxis();

Range range = xaxis.getRange();
double lower = dataset.getDomainLowerBound(false);
double upper = dataset.getDomainUpperBound(false);

if (Double.isNaN(lower) || !xaxis.isAutoRange())
return;

if (range.contains(upper))
return;

// if fixed auto range, then derive lower bound...
double fixedAutoRange = xaxis.getFixedAutoRange();

if (fixedAutoRange > 0.0) {
double margin = xaxis.getUpperMargin();

// margin is defined
if (margin > 0.001) {
upper = upper + margin * fixedAutoRange;
}

lower = upper - fixedAutoRange;
}

// attach the new range
xaxis.setRange(new Range(lower, upper), false, false);
dataset.restore();
composite.refresh();
}

/**
* Creates a sample dataset.
* * @return A sample dataset.
*/
private RealTimeXYDataset createDataset() {
RealTimeXYDataset series = new RealTimeXYDataset(new IDataSource() {

public double getParamValue(String param) {
// Just have a random number.
if (param.equals("X"))
return counter;

return Math.random();
}
});

series.setBufferSize(10000);
series.setXParam("X", "TBD");
series.addSeriesParam("Y1", "Y1");
series.addSeriesParam("Y2", "Y2");
return series;
}

private XYItemRenderer renderer1;

private DataGenerator dataGenerator;

private JFreeChart createRTChart(XYDataset dataset) {
// parent plot... X Axis
ValueAxis xaxis = new NumberAxis();
xaxis.setRange(0.0, 100);
xaxis.setAutoRange(true);
xaxis.setFixedAutoRange(100);


xaxis.setLowerMargin(0.1); // 10% margin
xaxis.setUpperMargin(0.1);

XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(true,
false);
renderer.setBaseToolTipGenerator(new StandardXYToolTipGenerator());
NumberAxis rangeAxis = new NumberAxis();
XYPlot plot = new XYPlot(dataset, xaxis, rangeAxis, renderer);

JFreeChart chart = new JFreeChart(null, null, plot, false);

TextTitle ttitle = new TextTitle("Scroll Plot Demo");

chart.setTitle(ttitle);
chart.setAntiAlias(true);

dataGenerator = new DataGenerator(250);
dataGenerator.start();
return chart;
}


class DataGenerator extends Timer implements ActionListener , SelectionListener {

Control control;

DataGenerator(int interval) {
super(interval, null);
addActionListener(this);
}

public void actionPerformed(ActionEvent event) {

refresh();
repaint();
//composite.reedraw(true);
//control.update();
}
}

public static void main(String[] args) {

demo = new TestDynChart1(
" swt Realtime XY Series Demo");
demo.pack();

demo.setVisible(true);


}
}
in above ActionPerformed class repaint method is not working ,
actually repaint is an awt method so i want to change it into swt method .
is there any alternative for it

please if anyone know help me....

...sorry for poor english

Thnaks,
anirudh.k
Reply With Quote