Menu

creating graphics with java, but not for web

Help
mélanie
2004-03-18
2012-09-22
  • mélanie

    mélanie - 2004-03-18

    I was wondering if you can use Jcckit to developp elaborate charts for a stand alone application. Because, as I don't need to developp a web application I don't have SVG installed.
    If it's not possible to do that with Jcckit, do you know an other way?

    Thanks

     
    • Franz-Josef Elmer

      If you want to store a chart as an image there are two ways:

      1. Make a screen shot and use some photo software
      2. Use the class sun.awt.image.codec.JPEGImageEncoderImpl which is a part of JDK since 1.2 to store an Image as a JPEG file. For more details see e.g. http://www.jguru.com/faq/view.jsp?EID=703938

       
    • Eugene J Ragasa

      Eugene J Ragasa - 2004-03-24

      actually i am currently using JCCKit for animated graphics for my stand alone application

      here is the basic method:

      (1)  define a class which extends GraphicsPlotCanvas.

      public MyPlot extends GraphicsPlotCanvas{
          .....
      }

      (2)  add it to a JPanel

      javax.swing.Jpanel myPanel = new Jpanel();
      // define your plot as of the plot you defined above
      MyPlot thisPlot =  new MyPlot;
      myPanel.add(thisPlot.getGraphicsCanvas());
      // add controls if you have them
      // see Brusselator example
      myPanel.add(new MyController().getControlPanel);

      (3)  you can then add this Jpanel to a JFrame or JDialog box.

      JFrame mainFrame = new JFrame("Main");
      mainFrame.add(myPanel)

      ///////////////////////////////
      here is some code, it need to provide the plot classes and stuff, see brusselator it almost the same.
      ///////////////////////////////

      /*
      * BrownianChart.java
      *
      * Created on March 23, 2004, 10:37 AM
      */

      package com.sourceforge.midas.charts;

      import java.util.*;
      import java.util.Properties;

      import java.awt.*;
      import javax.swing.*;

      import jcckit.util.ConfigData;
      import jcckit.util.ConfigParameters;
      import jcckit.util.PropertiesBasedConfigData;

      import com.sourceforge.midas.charts.*;
      import com.sourceforge.midas.maths.simulations.*;
      import com.sourceforge.midas.charts.BrownianPlot;

      public class BrownianChart extends javax.swing.JFrame{
          private Properties _configData = new Properties();
          private ConfigParameters _config
          = new ConfigParameters( new PropertiesBasedConfigData(_configData) );
            
          private WeinerProcess1D createWeinerProcess() {
              double totalTime = _config.getDouble("totalTime", 200   );
              double dt        = _config.getDouble("dt"       , 1);
             
              WeinerProcess1D _W = new WeinerProcess1D(dt, totalTime);
              int len = _W.getNumberOfPoints() + 1;
             
              double[] indices = _config.getDoubleArray("indices", new double[len]);
              double[] t       = _config.getDoubleArray("t"      , new double[len]);
              double[] x       = _config.getDoubleArray("x"      , new double[len]);
              double[] dx      = _config.getDoubleArray("dx"     , new double[len]);
             
              for (int i = 0; i < len; i++) {
                  int       index = (int) (indices[i] + 0.5);
              }
              return _W;
          }
         
          private void initChartProperties(){
              _configData.put( "background", "0xffffff");
              _configData.put( "paper", "0 0 1 0.35");
             
              _configData.put( "dt", "0.01");
              _configData.put( "dx", "200");
             
              _configData.put( "defaultAxisLabelAttributes/className", "jcckit.graphic.BasicGraphicAttributes");
              _configData.put( "defaultAxisLabelAttributes/fontType", "bold");
              _configData.put( "defaultAxisLabelAttributes/fontSize", "0.035");
              _configData.put( "defaultTicLabelAttributes/className", "jcckit.graphic.BasicGraphicAttributes");
              _configData.put( "defaultTicLabelAttributes/fontType", "bold");
              _configData.put( "defaultTicLabelAttributes/fontSize", "0.015");
             
              _configData.put( "plot/coordinateSystem/origin", "0.075 0.02");
              _configData.put( "plot/coordinateSystem/xAxis/axisLength", "0.9");
              _configData.put( "plot/coordinateSystem/xAxis/maximum", "200");
              _configData.put( "plot/coordinateSystem/xAxis/axisLabelAttributes/", "defaultAxisLabelAttributes/");
              _configData.put( "plot/coordinateSystem/xAxis/ticLabelFormat", "%0f");
              _configData.put( "plot/coordinateSystem/xAxis/ticLabelAttributes/", "defaultTicLabelAttributes/");
              _configData.put( "plot/coordinateSystem/xAxis/axisLabelPosition", "0 -0.02");
             
              _configData.put( "plot/coordinateSystem/yAxis/axisLength", "0.37");
              _configData.put( "plot/coordinateSystem/yAxis/axisLabel", "x, dx");
              _configData.put( "plot/coordinateSystem/yAxis/axisLabelAttributes/", "defaultAxisLabelAttributes/");
              _configData.put( "plot/coordinateSystem/yAxis/automaticTicCalculation", "false");
              _configData.put( "plot/coordinateSystem/yAxis/numberOfTics", "7");
              _configData.put( "plot/coordinateSystem/yAxis/ticLabelAttributes/", "defaultTicLabelAttributes/");
              _configData.put( "plot/coordinateSysstn/yAxis/minimum", "-30");
              _configData.put( "plot/coordinateSystem/yAxis/maximum", "30");
              _configData.put( "plot/coordinateSystem/yAxis/axisLabelPosition", "-0.035 0");
              _configData.put( "plot/curveFactory/definitions", "def null");
              _configData.put( "plot/curveFactory/def/symbolFactory/className", "jcckit.plot.SquareSymbolFactory");
              _configData.put( "plot/curveFactory/def/symbolFactory/size", "0.004");
              _configData.put( "plot/curveFactory/def/symbolFactory/attributes/className"
              , "jcckit.graphic.ShapeAttributes");
              _configData.put( "plot/legend/boxHeight", "0.08");
              _configData.put( "plot/legend/boxWidth", "0.09");
              _configData.put( "plot/legend/upperRightCorner", "0.97 0.385");
              _configData.put( "plot/legend/", "");
              _configData.put( "plot/legend/", "");
          }

          public Container createContentPane() {
         
              JPanel contentPane = new JPanel(new BorderLayout());
              contentPane.setBackground(_config.getColor("background", getBackground()));
              contentPane.setOpaque(true);

              // creating the weiner process
              WeinerProcess1D _W = createWeinerProcess();
                   
              // creating the Brownian Chart
              initChartProperties();
              BrownianPlot plot = new BrownianPlot(_config, _W);
             
              // javax.swing.JPanel panel = new JPanel();
              contentPane.add(plot.getGraphicsCanvas(), BorderLayout.CENTER);
              contentPane.add(new BrownianController(_W).getControlPanel(),
              BorderLayout.SOUTH);

              return contentPane;
          }
         
          public static void createAndShow() {
             
              JFrame.setDefaultLookAndFeelDecorated(true);
             
              JFrame frame = new JFrame("Midas");
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

              BrownianChart client = new BrownianChart();
              frame.setContentPane(client.createContentPane());
             
              frame.setSize(450, 260);
              frame.setVisible(true);
          }  

          public static void main(String[] argv){
              javax.swing.SwingUtilities.invokeLater(new Runnable() {
                  public void run() {
                      createAndShow();
                  }
              } );
          }
      }

       
    • movk

      movk - 2006-01-08

      Modified code from eragasa to Busselator. So now you can just compile and test as Java astandalone application.

      /*

      • JccKitBrusselator.java
        */
        package JccKitTest;

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

      import java.awt.;
      import javax.swing.
      ;
      import jcckit.GraphicsPlotCanvas;
      import jcckit.data.DataCurve;
      import jcckit.data.DataPlot;
      import jcckit.data.DataPoint;
      import jcckit.util.ConfigParameters;
      import jcckit.util.PropertiesBasedConfigData;

      public class JccKitTestBrusselator extends javax.swing.JFrame{
      private Properties _configData = new Properties();
      private ConfigParameters _config
      = new ConfigParameters( new PropertiesBasedConfigData(_configData));

      private void initChartProperties(){
          _configData.put(&quot;background&quot;, &quot;0xececcc&quot;);
          _configData.put(&quot;paper&quot;,&quot;0 0 1 0.35&quot;);
          _configData.put(&quot;dt&quot;,&quot;0.1&quot;);
          _configData.put(&quot;dx&quot;,&quot;1&quot;);
          _configData.put(&quot;noiseFactor&quot;,&quot;0.1&quot;);
          _configData.put(&quot;L&quot;,&quot;200&quot;);
          _configData.put(&quot;d&quot;,&quot;16&quot;);
          _configData.put(&quot;alpha&quot;,&quot;1.8&quot;);
          _configData.put(&quot;beta&quot;,&quot;1&quot;);
      
          _configData.put(&quot;defaultAxisLabelAttributes/className&quot;,&quot;jcckit.graphic.BasicGraphicAttributes&quot;);
          _configData.put(&quot;defaultAxisLabelAttributes/fontType&quot;,&quot;bold&quot;);
          _configData.put(&quot;defaultAxisLabelAttributes/fontSize&quot;,&quot;0.035&quot;);
          _configData.put(&quot;defaultTicLabelAttributes/className&quot;,&quot;jcckit.graphic.BasicGraphicAttributes&quot;);
          _configData.put(&quot;defaultTicLabelAttributes/fontType&quot;,&quot;bold&quot;);
          _configData.put(&quot;defaultTicLabelAttributes/fontSize&quot;,&quot;0.015&quot;);
      
          _configData.put(&quot;plot/coordinateSystem/origin&quot;,&quot;0.075 0.02&quot;);
          _configData.put(&quot;plot/coordinateSystem/xAxis/axisLength&quot;,&quot;0.9&quot;);
          _configData.put(&quot;plot/coordinateSystem/xAxis/maximum&quot;,&quot;200&quot;);
          _configData.put(&quot;plot/coordinateSystem/xAxis/axisLabelAttributes/&quot;,&quot;defaultAxisLabelAttributes/&quot;);
          _configData.put(&quot;plot/coordinateSystem/xAxis/ticLabelFormat&quot;,&quot;%0f&quot;);                
          _configData.put(&quot;plot/coordinateSystem/xAxis/ticLabelAttributes/&quot;,&quot;defaultTicLabelAttributes/&quot;);
          _configData.put(&quot;plot/coordinateSystem/xAxis/axisLabelPosition&quot;,&quot;0 -0.02&quot;);
          _configData.put(&quot;plot/coordinateSystem/yAxis/axisLength&quot;,&quot;0.37&quot;);
          _configData.put(&quot;plot/coordinateSystem/yAxis/axisLabel&quot;,&quot;u, v&quot;);
          _configData.put(&quot;plot/coordinateSystem/yAxis/axisLabelAttributes/&quot;,&quot;defaultAxisLabelAttributes/&quot;);
          _configData.put(&quot;plot/coordinateSystem/yAxis/automaticTicCalculation&quot;,&quot;false&quot;);
          _configData.put(&quot;plot/coordinateSystem/yAxis/numberOfTics&quot;,&quot;7&quot;);
          _configData.put(&quot;plot/coordinateSystem/yAxis/ticLabelAttributes/&quot;,&quot;defaultTicLabelAttributes/&quot;);
          _configData.put(&quot;plot/coordinateSystem/yAxis/maximum&quot;,&quot;3&quot;);
          _configData.put(&quot;plot/coordinateSystem/yAxis/axisLabelPosition&quot;,&quot;-0.035 0&quot;);
          _configData.put(&quot;plot/curveFactory/definitions&quot;,&quot;def null&quot;);
          _configData.put(&quot;plot/curveFactory/def/symbolFactory/className&quot;,&quot;jcckit.plot.SquareSymbolFactory&quot;);
          _configData.put(&quot;plot/curveFactory/def/symbolFactory/size&quot;,&quot;0.004&quot;);
          _configData.put(&quot;plot/curveFactory/def/symbolFactory/attributes/className&quot;,
                  &quot;jcckit.graphic.ShapeAttributes&quot;);
          _configData.put(&quot;plot/legend/boxHeight&quot;,&quot;0.08&quot;);
          _configData.put(&quot;plot/legend/boxWidth&quot;,&quot;0.09&quot;);
          _configData.put(&quot;plot/legend/upperRightCorner&quot;,&quot;0.97 0.385&quot;);
          _configData.put(&quot;plot/legend/&quot;,&quot;&quot;);
          _configData.put(&quot;plot/legend/&quot;,&quot;&quot;);
      };
      
      
      public class Brusselator {
          private double _noiseFactor = 0.001;
          private double _alpha, _beta, _d;
          private double _time;
          private final double[] _u, _v, _du, _dv;
          private final double _dx;
          private final double _dt;
          private ActionListener _listener;
      
          public Brusselator(double dx, double dt, double size) {
              _dx = dx;
              _dt = dt;
              _u = new double[(int) (size / dx + 0.5)];
              _v = new double[_u.length];
              _du = new double[_u.length];
              _dv = new double[_u.length];
              reset();
              addNoise();
          }
      
          public void addActionListener(ActionListener listener) {
              _listener = AWTEventMulticaster.add(_listener, listener);
          }
      
          private void notifyListeners(ActionEvent event) {
              if (_listener != null) {
                  _listener.actionPerformed(event);
              }
          }
      
          public double getDx() {
              return _dx;
          }
      
          public double getDt() {
              return _dt;
      
          }
      
          public double getTime() {
              return _time;
          }
      
          public void setTime(double time) {
              _time = time;
          }
      
          public void setNoiseFactor(double factor) {
              _noiseFactor = factor;
          }
      
          public void setAlpha(double alpha) {
              _alpha = alpha;
          }
      
          public void setBeta(double beta) {
              _beta = beta;
          }
      
          public void setD(double d) {
              _d = d;
          }
      
          public int getNumberOfPoints() {
              return _u.length;
          }
      
          public double getU(int index) {
              return _u[index];
          }
      
          public void setU(int index, double value) {
              _u[index] = value;
          }
      
          public double getV(int index) {
              return _v[index];
          }
      
          public void setV(int index, double value) {
              _v[index] = value;
          }
      
          public void reset() {
              for (int i = 0; i &lt; _u.length; i++) {
                  _u[i] = _beta;
                  _v[i] = _alpha / Math.max(0.01, _beta);
              }
              _time = 0;
              notifyListeners(new ActionEvent(this, 0, &quot;reset&quot;));
          }
      
          public void addNoise() {
              for (int i = 0; i &lt; _u.length; i++) {
                  _u[i] *= 1 + (0.5 - Math.random()) * _noiseFactor;
                  _v[i] *= 1 + (0.5 - Math.random()) * _noiseFactor;
              }
              _time = 0;
              notifyListeners(new ActionEvent(this, 0, &quot;state changed&quot;));
          }
      
          public void next() {
              int steps = (int) (_dt / ((_dx * _dx) / (2.5 * Math.max(1, _d)))) + 1;
              double dt = _dt / steps;
              for (int k = 0; k &lt; steps; k++) {
                  for (int i = 0, n = _u.length; i &lt; n; i++) {
                      _du[i] = (_u[(i + n - 1) % n] - 2 * _u[i] + _u[(i + 1) % n]) / (_dx * _dx)
      
                      + _beta + _u[i] * (_u[i] * _v[i] - 1 - _alpha);
                      _dv[i] = _d * (_v[(i + n - 1) % n] - 2 * _v[i] + _v[(i + 1) % n]) / (_dx * _dx)
                      + _u[i] * (_alpha - _u[i] * _v[i]);
                  }
                  // Euler schema
                  for (int i = 0, n = _u.length; i &lt; n; i++) {
                      _u[i] += dt * _du[i];
                      _v[i] += dt * _dv[i];
                  }
              }
              _time += _dt;
              notifyListeners(new ActionEvent(this, 0, &quot;state changed&quot;));
          }
      
      }
      
      public class BrusselatorController {
          private Brusselator _brusselator;
          private Thread _animationThread;
      
          public BrusselatorController(Brusselator brusselator) {
              _brusselator = brusselator;
          }
      
          public Panel getControlPanel() {
              Panel result = new Panel();
              Button startButton = new Button(&quot;start&quot;);
              startButton.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent event) {
                      _animationThread = new Thread() {
                          public void run() {
                              while (_animationThread != null) {
                                  try {
                                      Thread.sleep(100);
                                  } catch (InterruptedException e) {}
                                  _brusselator.next();
                              }
                          }
                      };
                      _animationThread.start();
                  }
              });
              result.add(startButton);
              Button stopButton = new Button(&quot;stop&quot;);
              stopButton.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent event) {
                      _animationThread = null;
                  }
              });
              result.add(stopButton);
              Button resetButton = new Button(&quot;reset&quot;);
              resetButton.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent event) {
                      _brusselator.reset();
                  }
              });
              result.add(resetButton);
              Button addNoiseButton = new Button(&quot;add noise&quot;);
              addNoiseButton.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent event) {
                      _brusselator.addNoise();
                  }
              });
              result.add(addNoiseButton);
      
              return result;
          }
      };
      
      private Brusselator createBrusselator() {
          double dx = _config.getDouble(&quot;dx&quot;, 1);
          double dt = _config.getDouble(&quot;dt&quot;, 0.05);
          double size = _config.getDouble(&quot;L&quot;, 100);
          Brusselator brusselator = new Brusselator(dx, dt, size);
          brusselator.setNoiseFactor(_config.getDouble(&quot;noiseFactor&quot;, 1e-4));
          brusselator.setAlpha(_config.getDouble(&quot;alpha&quot;, 1.8));
          brusselator.setBeta(_config.getDouble(&quot;beta&quot;, 1));
          brusselator.setD(_config.getDouble(&quot;d&quot;, 9));
          brusselator.reset();
          brusselator.addNoise();
          double[] indices = _config.getDoubleArray(&quot;indices&quot;, new double[0]);
          double[] u = _config.getDoubleArray(&quot;u&quot;, new double[0]);
          double[] v = _config.getDoubleArray(&quot;v&quot;, new double[0]);
          int len = Math.min(Math.min(u.length, v.length), indices.length);
          for (int i = 0; i &lt; len; i++) {
              int index = (int) (indices[i] + 0.5);
              brusselator.setU(index, u[i]);
              brusselator.setV(index, v[i]);
          }
          return brusselator;
      }
      
      public class BrusselatorPlot extends GraphicsPlotCanvas {
          private Brusselator _brusselator;
      
          public BrusselatorPlot(ConfigParameters config, Brusselator brusselator) {
              super(config);
              _brusselator = brusselator;
              brusselator.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent event) {
                      replot();
                  }
              });
              replot();
          }
      
          private void replot() {
              DataPlot plot = new DataPlot();
              DataCurve uCurve = new DataCurve(&quot;u&quot;);
              DataCurve vCurve = new DataCurve(&quot;v&quot;);
              double dx = _brusselator.getDx();
              for (int i = 0, n = _brusselator.getNumberOfPoints(); i &lt; n; i++) {
                  uCurve.addElement(new DataPoint(dx * i, _brusselator.getU(i)));
                  vCurve.addElement(new DataPoint(dx * i, _brusselator.getV(i)));
              }
              plot.addElement(uCurve);
              plot.addElement(vCurve);
              connect(plot);
          }
      }
      
      public Container createContentPane() {
          JPanel contentPane = new JPanel(new BorderLayout());
          contentPane.setBackground(_config.getColor(&quot;background&quot;, getBackground()));
          contentPane.setOpaque(true);
          initChartProperties();
          Brusselator brusselator=createBrusselator();
          BrusselatorPlot plot = new BrusselatorPlot(_config,brusselator);
          contentPane.add(plot.getGraphicsCanvas(), BorderLayout.CENTER);
          contentPane.add(new BrusselatorController(brusselator).getControlPanel(), 
          BorderLayout.SOUTH);
          return contentPane;
      }
      
      public static void createAndShow() {
          JFrame frame = new JFrame(&quot;JccKitTestBrusselator&quot;);
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
          JccKitTestBrusselator client = new JccKitTestBrusselator();
          frame.setContentPane(client.createContentPane());
      
          frame.setSize(450, 260);
          frame.setVisible(true);
      }
      
      public static void main(String[] argv){
          javax.swing.SwingUtilities.invokeLater(new Runnable() {
              public void run() {
                  createAndShow();
              }
          });
      }
      

      }

       

Log in to post a comment.

Auth0 Logo