PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : JAVA Wert "plotten"


Hardwaretoaster
2008-05-18, 22:50:01
Ich habe eine Klase geschrieben, die eine Membran repräsentiert, mit der kann ich werte für versch. Situationen berechnen, das scheint auch eingermaßen zu passen, jetzt gibt es eine Methode, die eine bestimmte Anzahl an Schritte berechnet und diese als Text ausgibt (die Daten werden in einen 2D-Array gehalten und repräsentieren eine Höhe).

Jetzt suche ich eine möglichst einfache Möglichkeit das zu zeichnen, ob Hell/Dunkel oder 3d ist schnuppe, ich muss daran auch keine große Genauigkiet ablesen können. Ich will quasi nach jeder Berechnung die Sache neu zeichnen.

Einschränkung ist, dass ich bis jetzt eigentlich nur textbasierte Sachen gemacht habe und ein, zwei Mini-Testapplets.

Was ich bis jetzt befunden habe ist zB FreeHEP, allerding scheine ich das Plotting package mom. nicht zu erreichen und die Doku, die ich bis jetzt dazu gefunden habe ist für einen Anfänger wie mich recht spärrlich.

Für eine Anregung wäre ich dankbar!

Flolle
2008-05-18, 23:37:41
Vielleicht wäre JFreeChart (http://www.jfree.org/jfreechart/) was?

Ist aber wahrscheinlich zum einen overkill und zum anderen gibt's da auch nicht viele Code-Beipiele (die Codedokumentation als solches ist allerdings sehr ordentlich), außer du bezahlst für den Developer's Guide. ;)

Aber selbst wenn's nicht geeignet ist gibt es immerhin unter FAQ ganz unten noch ein paar Links zu anderen Grafikbibliotheken.

Wenn du aber wirklich nichts tolles brauchst wäre es wahrscheinlich auch nicht sooo schwer etwas simples selbst zu schreiben, die 2D API von Java ist jetzt nicht so super kompliziert.

Monger
2008-05-19, 09:01:05
Verstehe ich dich richtig, dass du in einer Fensteranwendung ein Bild aus deinen Werten zeichnen willst?

Dazu musst du dich erstmal ein bißchen in Swing/AWT (http://java.sun.com/docs/books/tutorial/ui/index.html)reindenken.

Wenn erstmal das Fenster steht, brauchst du erstmal eine Zeichenfläche namens Canvas (http://java.sun.com/javase/6/docs/api/java/awt/Canvas.html).

Diese Canvas akzeptiert ein Graphics Objekt - und ein Image (http://java.sun.com/javase/6/docs/api/java/awt/Image.html) kann dir ein Graphics Objekt geben.

Image ist abstrakt, also erzeugst du dir eine Instanz eine der Unterklassen - wie eben das BufferedImage (http://java.sun.com/javase/6/docs/api/java/awt/image/BufferedImage.html). Das hat dann eine "setRGB" Methode, um bestimmte Werte zu setzen. Da musst du halt deine Werte sinnvoll reinklopfen.

Also, Patentrezept:

- eine Fensteranwendung mit einer Canvas bauen
- ein BufferedImage erzeugen
- Werte über setRGB() reinschreiben
- createGraphics aufrufen
- auf Canvas die Methode "update(Graphics g)" aufrufen

Abe Ghiran
2008-05-19, 09:49:31
- auf Canvas die Methode "update(Graphics g)" aufrufen

Mit dem Grafikkontext des BufferedImage? Dann wird das Canvas in das BufferImage gezeichnet. Scheint mir nicht sehr sinnvoll zu sein.

Du musst eine Klasse von Canvas ableiten (oder von JPanel, wenn du Swing verwendest) und in der abgeleiteten Klasse die paint(Graphics g) Methode überschreiben.
In paint() benutzt du dann das übergebene Graphics Objekt zum zeichnen. Z.B. könntest du mit

paint(Graphics g){
for(x=0; x < data.length; ++x){
g.drawLine(x, getHeight(), x, getHeight()-data[x]);
}
}

ein sehr schlichtes Balkendiagramm zeichnen. Ggf. musst du deine Datenwerte noch entsprechend skalieren. Damit das ganze neugezeichnet wird, rufst du auf dem Canvas repaint() auf.
Das Canvas fügst du dann einfach in einen Frame (bzw. JFrame) ein. Da musst du dann nur noch darauf achten, dass der LayoutManager den ganzen verfügbaren Platz deinem Canvas zuweist.

Grüße,
Jan

DocEW
2008-05-19, 09:57:26
Würde auch JFreeChart nehmen. Hier mal ein Beispiel:
http://www.java2s.com/Code/Java/Chart/JFreeChartDynamicDataDemo.htm

Hardwaretoaster
2008-05-19, 17:59:32
Danke soweit, werde mich da mal einlesen müssen.
Denke, meine Haupthürde ich, dass ich von den Vorgehensweisen bei grafischen Anwendungen an sich keine Erfahrung habe.