# Statistik grafisch ausgeben



## Gerhard (20. Okt 2004)

Hallo zusammen!

Habe folgendes Problem: 

Mittels eines Servlets kann ein User eine gewisse ID eingeben.
Das Servlet greift auf eine Datenbank zu und liefert dann, aufgrund der ID, Informationen über den User
wie zum Beispiel durschnittliche Loginzeiten usw.
Diese Teile des Programms funktionieren bereits (also es wird textuell ausgegeben,
wie lange welcher Benutzer online war).

Jetzt zu meinen Problem:

Die Strings die ich übergeben bekomme (durschnittliche Logindauer usw.) sollen nun grafisch mit AWT oder SWING ausgegeben werden. Ich soll also ein Balkendiagramm der Zeiten erstellen, kenne mich aber nicht recht aus wie ich das machen soll!  :bahnhof: 

Vielleicht kann mir jemand mit einem Codeschnipsel helfen?! 

mfg
Gerhard


----------



## dotlens (20. Okt 2004)

stelle vierecke dar mit einer Länge die variabel ist

z.b mit verhältnis 10 * den Wert / höchstwert

gar nicht so schwer


----------



## Gerhard (20. Okt 2004)

und wie mach ich dass? mit:

g.drawrectangle???


----------



## Gast (21. Okt 2004)

Hi Gerhard !

Schau Dir mal JFreeChart an.
http://www.jfree.org/jfreechart/


----------



## Gerhard (22. Okt 2004)

Die Freecharts sind eine tolle Lösung!

Leider ist das ganze etwas zu komplex. Das Programm sollte eher schlicht gehalten werden.
D.h. es gibt 3 Klassen:

    JDBCBean
    Statistik
    JDBCTest

In der Klasse JDBCBean werden die Datenbanktreiber (sybase Datenbank) geladen und eine Connection
zur Datenbank aufgebaut. In der Klasse Statistik befindet sich eine Instanz von JDBCBean.
Im Konstruktor wird die Methode zum Öffnen der Connection aufgerufen.
Anschließend werden die gewünschten Operationen (SELECTS usw.) ausgeführt.

Diese beiden Klassen funktionieren, die eigentliche "Problemklasse" ist die JDBCTest.
Sie ist das Servlet, welches nach eingabe der ID und nach klicken des Submit buttons ausgeführt wird.
Diese erbt von der Klasse HttpServlet. In JDBCTest befindet sich eine Instanz auf Statistik.
Danach wird der Parameter des Eingabefeldes des html - documentes eingelesen.
Aufgrund dieses Parameters weiß die DB nun, welche Werte sie übergeben soll.

Einziges Kriterium ist jetz, eine Art Balkendiagramm aus den Übergebenen Werten zu machen.

Hier die Klasse JDBCTest:


```
public class JDBCTest extends HttpServlet {

  public void init(){

  }

  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    response.setContentType("text/html");

 try{
    
 Statistik stat = new Statistik();
 
 String id = request.getParameter("id");
 

     
    int anzahl = 0;             // Anzahl der Logins insgesamt
    int durchschnitt = 0;       // Durchschnittliche Dauer der Logins
    int letzte = 0;             // Dauer des letzten Logins
    int eintrag_nr = 0;         // Nummer des Eintrages in der Tabelle
    String name = "";           // Name des Schülers

    
        name = stat.getName(id);
        durchschnitt = stat.getDurchSchnitt(id);
        letzte = stat.getLastLogin(id);
        anzahl = stat.getAnzahl(id);
        
       
        out.println("[b]Die Klasse und der Name des Schuelers lautet:[/b]         " + name + "

");
        out.println("[b]Durchschnittliche Dauer der Logins:[/b]    " + durchschnitt + " Minuten

");
        out.println("[b]Dauer des letzten Logins:[/b]              " + letzte + " Minuten

");
        out.println("[b]Gesamtanzahl der Logins:[/b]               " + anzahl + " Minuten");


        //Hier soll nun der Code stehen, welcher aus den Werten durschnitt, letze und anzahl
        //3 Balken macht, die in ein Koordinatensystem (y-Achse Minuten, x - Achse egal was)
        //eingefügt werden!!!!!
        
        stat.closeConn();
 
 
 }catch(Exception e){out.println(e.getMessage());}
 
 
 }
}
```

Vielleicht könnte mir jemand den fehlenden Codeteil schreiben, oder mir erklären, wie ich das am besten mache.

VIELEN VIELEN DANK!!!!

mfg
Gerhard


----------



## Roar (22. Okt 2004)

das wird im chat besporchen:

```
JPanel p = new JPanel();
Image im = p.createImage(300,100);
Graphics g = im.getGraphics();
g.drawString("Hallo", 20, 50);
ImageIO.write(getBufferedImage(im), "jpeg", new File("C:\\bild.jpg"));

// code klau :-)
	public static BufferedImage getBufferedImage(Image img) {
		// if the image is already a BufferedImage, cast and return it
		if((img instanceof BufferedImage) && background == null) {
			return (BufferedImage)img;
		}
		// otherwise, create a new BufferedImage and draw the original 
		// image on it
		int w = img.getWidth(null);
		int h = img.getHeight(null);
		BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
		Graphics2D g2d = bi.createGraphics();
		g2d.drawImage(img, 0, 0, w, h, null);
		g2d.dispose();
		return bi;
	}
```


----------



## Gast (22. Okt 2004)

http://cewolf.sourceforge.net/
Sollte das sein was Dir hilft!!

gehe das tutorial durch und schon bekommst Du es hin


----------

