Applet combined chart

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
maexchen
Posts: 15
Joined: Tue Nov 21, 2006 10:16 am

Applet combined chart

Post by maexchen » Tue Feb 06, 2007 2:35 pm

Hello!

Why doesn't work this Applet?

Code: Select all

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JApplet;
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.StandardXYItemRenderer;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;

/**
 * A demonstration application showing a time series chart where you can dynamically add
 * (random) data by clicking on a button.
 *
 */
public class combined extends JApplet implements ActionListener {

    /** The number of subplots. */
    public static final int SUBPLOT_COUNT = 3;
    
    /** The datasets. */
    private TimeSeriesCollection[] datasets;
    
    /** The most recent value added to series 1. */
    private double[] lastValue = new double[SUBPLOT_COUNT];

    /**
     * Constructs a new demonstration application.
     *
     * @param title  the frame title.
     */
    public combined(final String title) {

      
        final CombinedDomainXYPlot plot = new CombinedDomainXYPlot(new DateAxis("Time"));
        this.datasets = new TimeSeriesCollection[SUBPLOT_COUNT];
        
        for (int i = 0; i < SUBPLOT_COUNT; i++) {
            this.lastValue[i] = 100.0;
            final TimeSeries series = new TimeSeries("Random " + i, Millisecond.class);
            this.datasets[i] = new TimeSeriesCollection(series);
            final NumberAxis rangeAxis = new NumberAxis("Y" + i);
            rangeAxis.setAutoRangeIncludesZero(false);
            final XYPlot subplot = new XYPlot(
                    this.datasets[i], null, rangeAxis, new StandardXYItemRenderer()
            );
            subplot.setBackgroundPaint(Color.lightGray);
            subplot.setDomainGridlinePaint(Color.white);
            subplot.setRangeGridlinePaint(Color.white);
            plot.add(subplot);
        }

        final JFreeChart chart = new JFreeChart("Dynamic Data Demo 3", plot);
//        chart.getLegend().setAnchor(Legend.EAST);
        chart.setBorderPaint(Color.black);
        chart.setBorderVisible(true);
        chart.setBackgroundPaint(Color.white);
        
        plot.setBackgroundPaint(Color.lightGray);
        plot.setDomainGridlinePaint(Color.white);
        plot.setRangeGridlinePaint(Color.white);
  //      plot.setAxisOffset(new Spacer(Spacer.ABSOLUTE, 4, 4, 4, 4));
        final ValueAxis axis = plot.getDomainAxis();
        axis.setAutoRange(true);
        axis.setFixedAutoRange(60000.0);  // 60 seconds
   
  
  
        final JPanel content = new JPanel(new BorderLayout());

        final ChartPanel chartPanel = new ChartPanel(chart);
        content.add(chartPanel);

        final JPanel buttonPanel = new JPanel(new FlowLayout());
        
        for (int i = 0; i < SUBPLOT_COUNT; i++) {
            final JButton button = new JButton("Series " + i);
            button.setActionCommand("ADD_DATA_" + i);
            button.addActionListener(this);
            buttonPanel.add(button);
        }
        final JButton buttonAll = new JButton("ALL");
        buttonAll.setActionCommand("ADD_ALL");
        buttonAll.addActionListener(this);
        buttonPanel.add(buttonAll);
        
        content.add(buttonPanel, BorderLayout.SOUTH);
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 470));
        chartPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        setContentPane(content);

    }

    /**
     * Handles a click on the button by adding new (random) data.
     *
     * @param e  the action event.
     */
    public void actionPerformed(final ActionEvent e) {
 
        for (int i = 0; i < SUBPLOT_COUNT; i++) {
            if (e.getActionCommand().endsWith(String.valueOf(i))) {
                final Millisecond now = new Millisecond();
                System.out.println("Now = " + now.toString());
                this.lastValue[i] = this.lastValue[i] * (0.90 + 0.2 * Math.random());
                this.datasets[i].getSeries(0).add(new Millisecond(), this.lastValue[i]);       
            }
        }

        if (e.getActionCommand().equals("ADD_ALL")) {
            final Millisecond now = new Millisecond();
            System.out.println("Now = " + now.toString());
            for (int i = 0; i < SUBPLOT_COUNT; i++) {
                this.lastValue[i] = this.lastValue[i] * (0.90 + 0.2 * Math.random());
                this.datasets[i].getSeries(0).add(new Millisecond(), this.lastValue[i]);       
            }
        }

    }
 
}

david.gilbert
JFreeChart Project Leader
Posts: 11734
Joined: Fri Mar 14, 2003 10:29 am
antibot: No, of course not.
Contact:

Post by david.gilbert » Wed Feb 07, 2007 3:47 pm

Your applet needs a default constructor.
David Gilbert
JFreeChart Project Leader

:idea: Read my blog
:idea: Support JFree via the Github sponsorship program

maexchen
Posts: 15
Joined: Tue Nov 21, 2006 10:16 am

Post by maexchen » Thu Feb 08, 2007 11:00 am

What do you mean?

Code: Select all

public void init(){
   
}
public void start(){
    
}
public void stop(){
    
}
public void destroy(){
    
}
This I don'nt need.

mentalsandcastles
Posts: 13
Joined: Fri Feb 09, 2007 12:39 am
Location: California, USA

Post by mentalsandcastles » Sat Mar 10, 2007 12:02 am

I renamed your constructor to init, moved the JFreeChart declaration outside the constructor (e.g. global to the object) and added a paint method and it appears to work fine: Three line charts showing random numbers when one of several buttons are clicked. My code follows; I'm using Eclipse in case it matters:


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JApplet;
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.StandardXYItemRenderer;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;

/**
* A demonstration application showing a time series chart where you can dynamically add
* (random) data by clicking on a button.
*
*/
public class CombinedTest extends JApplet implements ActionListener {
// public void init() {
//
// };
JFreeChart chart = null;

public void paint(Graphics g) {
if ( chart!=null ) {
chart.draw( (Graphics2D)g,getBounds());
}
}

/** The number of subplots. */
public static final int SUBPLOT_COUNT = 3;

/** The datasets. */
private TimeSeriesCollection[] datasets;

/** The most recent value added to series 1. */
private double[] lastValue = new double[SUBPLOT_COUNT];

/**
* Constructs a new demonstration application.
*
* @param title the frame title.
*/
//public CombinedTest(final String title) {
public void init () {

final CombinedDomainXYPlot plot = new CombinedDomainXYPlot(new DateAxis("Time"));
this.datasets = new TimeSeriesCollection[SUBPLOT_COUNT];

for (int i = 0; i < SUBPLOT_COUNT; i++) {
this.lastValue = 100.0;
final TimeSeries series = new TimeSeries("Random " + i, Millisecond.class);
this.datasets = new TimeSeriesCollection(series);
final NumberAxis rangeAxis = new NumberAxis("Y" + i);
rangeAxis.setAutoRangeIncludesZero(false);
final XYPlot subplot = new XYPlot(
this.datasets, null, rangeAxis, new StandardXYItemRenderer()
);
subplot.setBackgroundPaint(Color.lightGray);
subplot.setDomainGridlinePaint(Color.white);
subplot.setRangeGridlinePaint(Color.white);
plot.add(subplot);
}

chart = new JFreeChart("Dynamic Data Demo 3", plot);
// chart.getLegend().setAnchor(Legend.EAST);
chart.setBorderPaint(Color.black);
chart.setBorderVisible(true);
chart.setBackgroundPaint(Color.white);

plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
// plot.setAxisOffset(new Spacer(Spacer.ABSOLUTE, 4, 4, 4, 4));
final ValueAxis axis = plot.getDomainAxis();
axis.setAutoRange(true);
axis.setFixedAutoRange(60000.0); // 60 seconds



final JPanel content = new JPanel(new BorderLayout());

final ChartPanel chartPanel = new ChartPanel(chart);
content.add(chartPanel);

final JPanel buttonPanel = new JPanel(new FlowLayout());

for (int i = 0; i < SUBPLOT_COUNT; i++) {
final JButton button = new JButton("Series " + i);
button.setActionCommand("ADD_DATA_" + i);
button.addActionListener(this);
buttonPanel.add(button);
}
final JButton buttonAll = new JButton("ALL");
buttonAll.setActionCommand("ADD_ALL");
buttonAll.addActionListener(this);
buttonPanel.add(buttonAll);

content.add(buttonPanel, BorderLayout.SOUTH);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 470));
chartPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
setContentPane(content);

}

/**
* Handles a click on the button by adding new (random) data.
*
* @param e the action event.
*/
public void actionPerformed(final ActionEvent e) {

for (int i = 0; i < SUBPLOT_COUNT; i++) {
if (e.getActionCommand().endsWith(String.valueOf(i))) {
final Millisecond now = new Millisecond();
System.out.println("Now = " + now.toString());
this.lastValue = this.lastValue * (0.90 + 0.2 * Math.random());
this.datasets.getSeries(0).add(new Millisecond(), this.lastValue);
}
}

if (e.getActionCommand().equals("ADD_ALL")) {
final Millisecond now = new Millisecond();
System.out.println("Now = " + now.toString());
for (int i = 0; i < SUBPLOT_COUNT; i++) {
this.lastValue = this.lastValue * (0.90 + 0.2 * Math.random());
this.datasets.getSeries(0).add(new Millisecond(), this.lastValue[i]);
}
}

}

}
Have you hugged your computer geek today?

Locked