Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
bin kompletter Anfänger im Gebiet Grafiken mit Java, bitte daher um Rücksicht und Hilfe
ich würde gerne anhand von verschiedenen Zeit und Höhendaten aus einer Datenbank eine Grafik mit Höhenlinie und Zeitlinie erstellen.
Leider fehlt mir hier der komplette Ansatz. Könnte hier bitte jemand mit ein paar Stichworten um sich werfen und mir verraten mit welchen Werkzeugen ich hier arbeiten kann / muss?
Angezeigt sollen diese Grafiken auf einer Webseite bzw. später in einem App werden. Denke die Grafiken werden dort dann als png / pdf oder Ähnliches eingebunden.
Hallo,
Also so würde ich es machen (Einige werden es wahrscheinlich auch besser machen können ):
1. Du musst hier mit einem GUI arbeiten, also erstelle dir am Besten einen JFRame.
Wie das geht ist auch im Internet tausendfach beschrieben.
2. Als erstes musst du ja die Höhendaten sowie die Zeitdaten aus der Datenbank holen.
Da ließ am besten mal im Internet was über Datenbanken, und wie man in Java darauf zugreift.
(Ich verwende immer MySql)
Dabei muss das Programm erst feststellen, wie viele Einträge es in der Datenbank gibt. Dann soll das so funktionieren: 1 Zeile auslesen Die Höhe soll in die Variable int y und die Zeit in die Variable int x gespeichert werden.
3. Für den "Untergrund" also, die Tabelle (ohne eingetragene Daten) würde ich einfach ein Foto nehmen und es als Icon z.B. auf ein Label packen und im Hintergrund des JFrames platzieren.
4. Dann gehts ans eigentliche eintragen der Werte mit dem "Pixel-Koordinatensystem".
Wichtig ist hierfür, dass das Layouts deines Frames auf "Absolute-Layout" eingestellt ist.
Damit hast du quasi eine Art Pixel-Koordinatensystem.
Du kannst entweder einen Punkt/Linie mit der Paint-Methode zeichnen, oder ein Icon z.B. auf einem Label an der bestimmten Position anzeigen Lassen.
Wichtig ist hier, du brauchst eine weitere Variable für x und y. Denn in der Datenbank y=1 wäre ja dann eingezeichnet 1 Pixel auf der Y-Achse. Dann wäre alles ja winzig klein. Du musst also (z.B.) schreiben:
Code:
yFertig = y*10;
Dann ist der Wert 1 in der Datenbank 1 Meter Höhe und hat dann 10 Pixel vom Boden.
Das heißt 1 Meter (immer wenn ich hier von Metern rede, meine ich natürlich eine Dateneinheit) auf Diagramm und aus Datenbank = 10 Pixel auf dem JFrame.
Und das gleiche für die Zeit mit der y-Achse.
Du kannst dann mit einem Scrollrad oder Schieberegler,... diese Proportionen ändern lassen, also:
Je nachdem um wie viele Pixel das Scrollrad/Schieberegler,... verschoben wurde, soweit ändert sich der Faktor, der yFertig definiert.
5. Und dann muss in der Datenbank geguckt werden: gibt es eine 2. Zeile?
Wenn ja, dann neue x und y Variablen anlegen lassen, und die Methode, in der Nr.4 beschrieben wird nochmals aufrufen, diesmal aber einen neuen Punkt(oder Icon) erstellen lassen, mit den neuen Variablen. Hier musst du aber gut aufpassen, es ist (ich finde es zuminedst so ) sehr schwierig zu machen, dass beim 2. Mal in der gleichen Methode ein weiterer Punkt erstellt wird.
Hierfür würde ich eine Variable verwenden, die bei jeder neuen Zeile i. d. Datenbank ausgelesen (von 0 anfangend) immer +1 macht, die du dann für die Erstellung und Benennung neuer Objekte verwenden kannst. Gerade für diesen Abschnitt des Programm solltest du sehr über solche Sachen (v.A. komplexe, vorprogrammierte Objekterstellung/Variablenbenennung mit bereits verfügbaren Variablen) informieren.
6. Und das gleiche von Punkt 5 sooft, wie die in Schritt 2 erstellte Variable, die beschreibt,
wie viele Zeilen es gibt.
HINWEIS zu Schritt 4:
Wenn du das als Linie verbinden willst, brauchst du immer 2*2 "Datenpaare" , da du ja Anfang und Ende der Linie als Werte im Koordinatensystem aus Pixeln definieren musst.
Wenn du nicht weißt, wie das in den einzelnen Punkten Beschriebene funktioniert,
dann musst du dich im Internet darüber informieren. (Habe auch allses aus dem Intenet gelernt )
Also wie gesagt, SO WÜRDE ICH ES MACHEN.
Ich vermute es gibt viele andere und einfachere Möglichkeiten, aber mit dem Java-Wissen, das ich habe, lässt es sich (für mich) nunmal nur so machen.
Falls jemand irgendeinen Fehler entdeckt, würde ich mich natürlich freuen mich darauf aufmerksam zu machen.
Wenn du noch irgendwelche Fragen hast, kannst du sie gerne stellen.