Hallöle, da ich bisher selbst auf keine vernünftige Lösung gekommen bin und die Lösungen, die Google mir ausspuckt, nicht funktionieren (warum auch immer, auf dem Papier sahen sie ganz vernünftig aus), dachte ich mir, ich wende mich mit meinem Problem mal an euch.
Folgender Sachverhalt liegt vor:
Ich will mir einen Abkömmling vom JPanel schreiben, mit der ein eingezeichnetes Koordinatensystem hat, um später darin verschiedene Graphen darstellen zu können.
An sich klappt das Ganze auch ganz okay, aber ich bekomme es einfach nicht hin, die Beschriftung der Y-Achse zu drehen. Alle Lösungen, die ich gefunden habe (g2d.rotate(); AffineTransform.getRotateInstance() ect) funktionieren nicht, wie gewünscht, die Pane bleibt dann einfach leer (wahrscheinlich weil außerhalb des sichtbaren Bereiches gezeichnet wird).
Gibt's eine einfache Lösung um Strings um 90° gekippt zeichnen zu lassen?
Oder kann man einen String irgendwie zu einem Shape parsen, auf den man dann die Rotation anwenden kann, ohne direkt auf Graphics zurückzugreifen?
Desweiteren kommt es mir bei der Pane so vor, als würde er nicht da zeichnen, wo er soll.
Der Koordinatenursprung sollte mit umgekehrter Y-Achse bei den Koordinaten 10/10 (vom Pane aus) liegen, die Achsen sollten über die gesamte Länge des Panes - 10 gehen.
Die Beschriftungen der Achsen sollten jeweils in der Mitte der gezeichneten Achsen liegen.
Hier die relevanten Methoden:
Folgender Sachverhalt liegt vor:
Ich will mir einen Abkömmling vom JPanel schreiben, mit der ein eingezeichnetes Koordinatensystem hat, um später darin verschiedene Graphen darstellen zu können.
An sich klappt das Ganze auch ganz okay, aber ich bekomme es einfach nicht hin, die Beschriftung der Y-Achse zu drehen. Alle Lösungen, die ich gefunden habe (g2d.rotate(); AffineTransform.getRotateInstance() ect) funktionieren nicht, wie gewünscht, die Pane bleibt dann einfach leer (wahrscheinlich weil außerhalb des sichtbaren Bereiches gezeichnet wird).
Gibt's eine einfache Lösung um Strings um 90° gekippt zeichnen zu lassen?
Oder kann man einen String irgendwie zu einem Shape parsen, auf den man dann die Rotation anwenden kann, ohne direkt auf Graphics zurückzugreifen?
Desweiteren kommt es mir bei der Pane so vor, als würde er nicht da zeichnen, wo er soll.
Der Koordinatenursprung sollte mit umgekehrter Y-Achse bei den Koordinaten 10/10 (vom Pane aus) liegen, die Achsen sollten über die gesamte Länge des Panes - 10 gehen.
Die Beschriftungen der Achsen sollten jeweils in der Mitte der gezeichneten Achsen liegen.
Hier die relevanten Methoden:
Java:
public void paint(Graphics g) {
Graphics2D g2d =(Graphics2D) g;
initialize();
System.out.println(width + " " + height);
//draw chart x/y/diag title
g2d.drawString(yTitle, 10 , height / 2 -10);
g2d.drawString(xTitle, width / 2 - 10 , height - 3);
g2d.drawString(diagTitle, width / 2 -10 , 10);
//Transformation to reverse y
AffineTransform at = new AffineTransform();
at.setToScale(1, -1);
AffineTransform translate = new AffineTransform();
translate.setToTranslation(10, height - 10);
at.preConcatenate(translate);
g2d.transform(at);
//To draw the coordinate system
g2d.drawLine(zero.x, zero.y, 10, yheight);
g2d.drawLine(zero.x, zero.y, xlength, 10);
//Draw scale
//x
for(int a = 10; a <= xlength; a++ ) {
if(a == 10 || a%10 == 0) {
g2d.drawLine(a, 10, a, 5);
}else{
if(a%2 == 0) {
g2d.drawLine(a, 10, a, 7);
}
}
}
//y
for(int a = 10; a <= yheight; a++ ) {
if(a == 10 || a%10 == 0) {
g2d.drawLine(10, a, 5, a);
}else{
if(a%2 == 0) {
g2d.drawLine(10, a, 7, a);
}
}
}
}
private void initialize() {
height = this.getHeight();
width = this.getWidth();
xlength = width - 10;
yheight = height - 10;
}
Anhänge
Zuletzt bearbeitet: