# Liniendiagramm / Balkendiagramm



## Guest (12. Feb 2004)

Arbeite mit einem embedded Webserver der Firma Lantronix um mit einem µ-Controller zu kommunizieren.

Dieser kleine Webserver beherrscht java und ich will daher Daten grafisch Darstellen.

Ein Liniendiagramm / balkendiagramm wäre hierfür am besten geeignet, jedoch kann ich chart2d / jfreechart nicht verwenden, da der speicher des Webservers (384kb) in 64kb Bänke geteilt ist und die jar Datei der beiden genannten größer ist als 64kb.

Der funktionsumfang ist mir auch viel zu groß.

Gesucht wird also ein einfaches Linien oder Balkendiagramm "Tool" im stil von chart2d oder jfreechart, jedoch nicht so überladen.


Hab schon einiges durchsucht, aber leider nichts gefunden.

Für Hilfe wäre ich sehr dankbar!

Lg

Roman


----------



## m3ph (12. Feb 2004)

so nochmal eingeloggt 
Die Daten für das Diagramm sollten in Java übergeben und verändert werden können.


----------



## jptc.org (13. Feb 2004)

Schau Dir doch mal JOpenChart an. 

http://jopenchart.sourceforge.net/

Die Distribution ist zwar 69k gross, aber wenn Du die Source in ein neues Jar packst kannst Du durchaus unter 64k kommen.

Karsten Voigt
http://www.java-performance-portal.org


----------



## DP (13. Feb 2004)

für simple 3d-charts hatte ich mal was entworfen... waren max 3 klassen. 

bei interesse einfach bescheidgeben, ich such dir die klassen dann,...


----------



## magneto (13. Feb 2004)

HI DP,

also mich würde das mit dem Chart interessieren...  
greetz 
ivan


----------



## m3ph (22. Feb 2004)

@DP

wäre sehr daran interessiert!!


----------



## DP (26. Feb 2004)

huh, sorry. werde die klasse heute reinstellen. eben suchen...


----------



## DP (26. Feb 2004)

so, hab mal gesucht. falls fragen zur besagter klasse aufkommen, einfach mal testen oder fragen  der code ist "quick & dirty"


```
import java.lang.reflect.Array;
import java.awt.*;

import java.util.ArrayList;


class Balkendiagramm3d extends Canvas
{
  int werte[];
  Rectangle rects[];       // Rechtecke, die Balken repräsentieren
  int balkenbreite;
  int xOffset;
  int Balkentiefe = 10;
  boolean Konturenzeichnen = false;
  ArrayList Farbwerte = new ArrayList();


  public Balkendiagramm3d(int werte[], int balkenbreite, int xOffset)
  {
    this.werte = werte;
    this.balkenbreite = balkenbreite;
    this.xOffset = xOffset;
    this.update(werte);
  }

  public Balkendiagramm3d(int werte[], int balkenbreite, int xOffset, int _Balkentiefe)
  {
    this.werte = werte;
    this.balkenbreite = balkenbreite;
    this.Balkentiefe = _Balkentiefe;
    this.xOffset = xOffset;
    this.update(werte);
  }

  public Balkendiagramm3d(int werte[], int balkenbreite, int xOffset, int _Balkentiefe, boolean _Konturenzeichnen)
  {
    this.werte = werte;
    this.balkenbreite = balkenbreite;
    this.Balkentiefe = _Balkentiefe;
    this.xOffset = xOffset;
    this.update(werte);
    this.Konturenzeichnen = _Konturenzeichnen;
  }

  public void update(int werte[])
  {
    this.werte = werte;
    int anzWerte = Array.getLength(this.werte);
    this.rects = new Rectangle[anzWerte];

    int minWert = 10000;
    int maxWert = -10000;
    for (int ii = 0; ii < anzWerte; ii++)
    {
      minWert = Math.min(minWert, this.werte[ii]);
      maxWert = Math.max(maxWert, this.werte[ii]);
    }

    int yOffset = 0;
    if (minWert <= 0)
    {
      yOffset = Math.abs(minWert) + 3;
    }

    for (int ii = 0; ii < anzWerte; ii++)
    {
      rects[ii] = new Rectangle();
      rects[ii].x = this.balkenbreite * ii + this.xOffset;
      rects[ii].width = this.balkenbreite;

      if (minWert == 0 && maxWert == 0)
      {
        rects[ii].height = 3;
      }
      else
      {
        rects[ii].height = (int)((double)(this.werte[ii] + yOffset) / (maxWert + yOffset) * 220);
      }
      rects[ii].y = 240 - rects[ii].height;
    }
  }


  public void paint(Graphics g)
  {
    generateColors();
    Graphics2D g2 = (Graphics2D) g;

    g2.setPaint(Color.decode("#DDFFD2"));
    g2.fillRect(0, 0, 300, 250);


    for (int ii = 0; ii < Array.getLength(werte); ii++)
    {
      //vorne
      int punkt_1_x = rects[ii].x;
      int punkt_1_y = rects[ii].y;

      int punkt_2_x = rects[ii].x;
      int punkt_2_y = rects[ii].y + rects[ii].height;

      int punkt_3_x = rects[ii].x + rects[ii].width;
      int punkt_3_y = rects[ii].y + rects[ii].height;

      int punkt_4_x = rects[ii].x + rects[ii].width;
      int punkt_4_y = rects[ii].y;

      //seite

      int punkt_5_x = rects[ii].x + rects[ii].width + this.Balkentiefe;
      int punkt_5_y = rects[ii].y - this.Balkentiefe;

      int punkt_6_x = rects[ii].x + rects[ii].width + this.Balkentiefe;
      int punkt_6_y = rects[ii].y + rects[ii].height - this.Balkentiefe;

      int punkt_7_x = rects[ii].x + rects[ii].width;
      int punkt_7_y = rects[ii].y + rects[ii].height;

      int punkt_8_x = rects[ii].x + rects[ii].width;
      int punkt_8_y = rects[ii].y;

      //oben

      int punkt_9_x = rects[ii].x + rects[ii].width + this.Balkentiefe;
      int punkt_9_y = rects[ii].y - this.Balkentiefe;

      int punkt_10_x = rects[ii].x + this.Balkentiefe;
      int punkt_10_y = rects[ii].y - this.Balkentiefe;

      int punkt_11_x = rects[ii].x;
      int punkt_11_y = rects[ii].y;

      int punkt_12_x = rects[ii].x + rects[ii].width;
      int punkt_12_y = rects[ii].y;

      //ecke oben links

      int punkt_13_x = rects[ii].x + this.Balkentiefe;
      int punkt_13_y = rects[ii].y;

      int punkt_14_x = rects[ii].x;
      int punkt_14_y = rects[ii].y;

      int punkt_15_x = rects[ii].x + this.Balkentiefe;
      int punkt_15_y = rects[ii].y - this.Balkentiefe;

      //vorne links überlagert

      int punkt_16_x = punkt_13_x;
      int punkt_16_y = punkt_13_y;

      int punkt_17_x = punkt_1_x;
      int punkt_17_y = punkt_1_y;

      int punkt_18_x = punkt_2_x;
      int punkt_18_y = punkt_2_y;

      int punkt_19_x = punkt_18_x + this.Balkentiefe;
      int punkt_19_y = punkt_18_y - this.Balkentiefe;

      //unten links überlagert

      int punkt_20_x = punkt_19_x;
      int punkt_20_y = punkt_19_y;

      int punkt_21_x = punkt_18_x;
      int punkt_21_y = punkt_18_y;

      int punkt_22_x = punkt_3_x;
      int punkt_22_y = punkt_3_y;

      int punkt_23_x = punkt_3_x;
      int punkt_23_y = punkt_3_y - this.Balkentiefe;


      Polygon vorne = new Polygon();
      Polygon seite = new Polygon();
      Polygon oben = new Polygon();
      Polygon oben_links = new Polygon();
      Polygon vorne_links = new Polygon();
      Polygon unten_links = new Polygon();

      vorne.addPoint(punkt_1_x, punkt_1_y);
      vorne.addPoint(punkt_2_x, punkt_2_y);
      vorne.addPoint(punkt_3_x, punkt_3_y);
      vorne.addPoint(punkt_4_x, punkt_4_y);
      g2.setPaint(Color.decode(((BalkenBean)this.Farbwerte.get(ii)).getFarbe_vorne()));
      g2.fillPolygon(vorne);
      if(this.Konturenzeichnen)
      {
        g2.setPaint(Color.decode("#000000"));
        g2.drawPolygon(vorne);
      }

      seite.addPoint(punkt_5_x, punkt_5_y);
      seite.addPoint(punkt_6_x, punkt_6_y);
      seite.addPoint(punkt_7_x, punkt_7_y);
      seite.addPoint(punkt_8_x, punkt_8_y);
      g2.setPaint(Color.decode(((BalkenBean)this.Farbwerte.get(ii)).getFarbe_seite()));
      g2.fillPolygon(seite);
      if(this.Konturenzeichnen)
      {
        g2.setPaint(Color.decode("#000000"));
        g2.drawPolygon(seite);
      }

      oben.addPoint(punkt_9_x, punkt_9_y);
      oben.addPoint(punkt_10_x, punkt_10_y);
      oben.addPoint(punkt_11_x, punkt_11_y);
      oben.addPoint(punkt_12_x, punkt_12_y);
      g2.setPaint(Color.decode(((BalkenBean)this.Farbwerte.get(ii)).getFarbe_oben()));
      g2.fillPolygon(oben);
      if(this.Konturenzeichnen)
      {
        g2.setPaint(Color.decode("#000000"));
        g2.drawPolygon(oben);
      }

      if(rects[ii].height > 4)
      {
        oben_links.addPoint(punkt_13_x, punkt_13_y);
        oben_links.addPoint(punkt_14_x, punkt_14_y);
        oben_links.addPoint(punkt_15_x, punkt_15_y);
        g2.setPaint(Color.decode(((BalkenBean)this.Farbwerte.get(ii)).getFarbe_1()));
        g2.fillPolygon(oben_links);
        if(this.Konturenzeichnen)
        {
          g2.setPaint(Color.decode("#000000"));
          g2.drawPolygon(oben_links);
        }

        vorne_links.addPoint(punkt_16_x, punkt_16_y);
        vorne_links.addPoint(punkt_17_x, punkt_17_y);
        vorne_links.addPoint(punkt_18_x, punkt_18_y);
        vorne_links.addPoint(punkt_19_x, punkt_19_y);
        g2.setPaint(Color.decode(((BalkenBean)this.Farbwerte.get(ii)).getFarbe_2()));
        g2.fillPolygon(vorne_links);
        if(this.Konturenzeichnen)
        {
          g2.setPaint(Color.decode("#000000"));
          g2.drawPolygon(vorne_links);
        }

        unten_links.addPoint(punkt_20_x, punkt_20_y);
        unten_links.addPoint(punkt_21_x, punkt_21_y);
        unten_links.addPoint(punkt_22_x, punkt_22_y);
        unten_links.addPoint(punkt_23_x, punkt_23_y);
        g2.setPaint(Color.decode(((BalkenBean)this.Farbwerte.get(ii)).getFarbe_3()));
        g2.fillPolygon(unten_links);
        if(this.Konturenzeichnen)
        {
          g2.setPaint(Color.decode("#000000"));
          g2.drawPolygon(unten_links);
        }
      }
    }

    for (int ii = 0; ii < Array.getLength(werte); ii++)
    {

      if(rects[ii].height > 4)
      {
        //unten rechts überlagert
        int punkt_24_x = rects[ii].x + rects[ii].width;
        int punkt_24_y = rects[ii].y + rects[ii].height - this.Balkentiefe;

        int punkt_25_x = rects[ii].x + rects[ii].width + this.Balkentiefe;
        int punkt_25_y = rects[ii].y + rects[ii].height - this.Balkentiefe;

        int punkt_26_x = rects[ii].x + rects[ii].width;
        int punkt_26_y = rects[ii].y + rects[ii].height;

        Polygon unten_rechts = new Polygon();

        unten_rechts.addPoint(punkt_24_x, punkt_24_y);
        unten_rechts.addPoint(punkt_25_x, punkt_25_y);
        unten_rechts.addPoint(punkt_26_x, punkt_26_y);
        //g2.setPaint(Color.decode("#000000"));
        //g2.fillPolygon(oben_links);
        if(this.Konturenzeichnen)
        {
          g2.setPaint(Color.decode("#000000"));
          g2.drawPolygon(unten_rechts);
        }
      } //if
    } //for

    g2.setPaint(Color.decode("#000000"));
    g2.drawLine(0, 15, 5, 15);
    g2.drawLine(0, 125, 5, 125);
    g2.drawLine(0, 238, 5, 238);
  }

  private void generateColors()
  {
    BalkenBean Balken_0 = new BalkenBean();
    Balken_0.setFarbe_oben("#EEEE29");
    Balken_0.setFarbe_seite("#DEDE41");
    Balken_0.setFarbe_vorne("#FFFF41");
    Balken_0.setFarbe_1("#DEDE41");
    Balken_0.setFarbe_2("#DEDE41");
    Balken_0.setFarbe_3("#DEDE41");
    this.Farbwerte.add(0, Balken_0);

    BalkenBean Balken_1 = new BalkenBean();
    Balken_1.setFarbe_oben("#73264D");
    Balken_1.setFarbe_seite("#4D1A33");
    Balken_1.setFarbe_vorne("#993366");
    Balken_1.setFarbe_1("#DEDE41");
    Balken_1.setFarbe_2("#DEDE41");
    Balken_1.setFarbe_3("#DEDE41");
    this.Farbwerte.add(1, Balken_1);

    BalkenBean Balken_2 = new BalkenBean();
    Balken_2.setFarbe_oben("#BFBF99");
    Balken_2.setFarbe_seite("#808066");
    Balken_2.setFarbe_vorne("#FFFFCC");
    Balken_2.setFarbe_1("#DEDE41");
    Balken_2.setFarbe_2("#DEDE41");
    Balken_2.setFarbe_3("#DEDE41");
    this.Farbwerte.add(1, Balken_2);

    BalkenBean Balken_3 = new BalkenBean();
    Balken_3.setFarbe_oben("#99BFBF");
    Balken_3.setFarbe_seite("#668080");
    Balken_3.setFarbe_vorne("#CCFFFF");
    Balken_3.setFarbe_1("#DEDE41");
    Balken_3.setFarbe_2("#DEDE41");
    Balken_3.setFarbe_3("#DEDE41");
    this.Farbwerte.add(3, Balken_3);

    BalkenBean Balken_4 = new BalkenBean();
    Balken_4.setFarbe_oben("#4D004D");
    Balken_4.setFarbe_seite("#330033");
    Balken_4.setFarbe_vorne("#660066");
    Balken_4.setFarbe_1("#DEDE41");
    Balken_4.setFarbe_2("#DEDE41");
    Balken_4.setFarbe_3("#DEDE41");
    this.Farbwerte.add(4, Balken_4);

    BalkenBean Balken_5 = new BalkenBean();
    Balken_5.setFarbe_oben("#BF6060");
    Balken_5.setFarbe_seite("#804040");
    Balken_5.setFarbe_vorne("#FF8080");
    Balken_5.setFarbe_1("#DEDE41");
    Balken_5.setFarbe_2("#DEDE41");
    Balken_5.setFarbe_3("#DEDE41");
    this.Farbwerte.add(5, Balken_5);

    BalkenBean Balken_6 = new BalkenBean();
    Balken_6.setFarbe_oben("#004D99");
    Balken_6.setFarbe_seite("#003366");
    Balken_6.setFarbe_vorne("#0066CC");
    Balken_6.setFarbe_1("#DEDE41");
    Balken_6.setFarbe_2("#DEDE41");
    Balken_6.setFarbe_3("#DEDE41");
    this.Farbwerte.add(6, Balken_6);

    BalkenBean Balken_7 = new BalkenBean();
    Balken_7.setFarbe_oben("#9999BF");
    Balken_7.setFarbe_seite("#666680");
    Balken_7.setFarbe_vorne("#CCCCFF");
    Balken_7.setFarbe_1("#DEDE41");
    Balken_7.setFarbe_2("#DEDE41");
    Balken_7.setFarbe_3("#DEDE41");
    this.Farbwerte.add(7, Balken_7);

    BalkenBean Balken_8 = new BalkenBean();
    Balken_8.setFarbe_oben("#000060");
    Balken_8.setFarbe_seite("#000040");
    Balken_8.setFarbe_vorne("#000080");
    Balken_8.setFarbe_1("#DEDE41");
    Balken_8.setFarbe_2("#DEDE41");
    Balken_8.setFarbe_3("#DEDE41");
    this.Farbwerte.add(8, Balken_8);

    BalkenBean Balken_9 = new BalkenBean();
    Balken_9.setFarbe_oben("#BF00BF");
    Balken_9.setFarbe_seite("#800080");
    Balken_9.setFarbe_vorne("#FF00FF");
    Balken_9.setFarbe_1("#DEDE41");
    Balken_9.setFarbe_2("#DEDE41");
    Balken_9.setFarbe_3("#DEDE41");
    this.Farbwerte.add(9, Balken_9);

  }

}
```


----------

