Hallo,
ich möchte ein Koordinatensystem zeichnen und Punkte einzeichnen. Beides klappt auch super. Nun wollte ich als nächstes die Achsen beschriften. Die x-Achse habe ich hinbekommen, bei der y-Achse hänge ich jetzt schon einige Stunden fest. Ich habe Quelltext hier aus dem Forum gefunden (http://www.tutorials.de/threads/graphics2d-string-vertikal-zeichnen.205499/#post-1063737). Das Problem dabei ist, dass er mir den gesamten Inhalt des JFrames dreht. Also auch die Koordinaten der Punkte werden gedreht. Eingebunden habe ich es so:
Start
Inhalt
Was mir bei diesem Code auch auffiel: die neuen Koordinaten scheinen nicht mehr auf das JPanel bezogen zu sein. Bei g2d.drawString("",0,0) verschwindet das gedrehte Bild aus dem JPanel.
Ein zweites Problem, welches ich nicht gelöst bekomme ist, dass ich den Hintergrund des JPanels gerne weiß hätte. Der Aufruf von
im Konstruktor der Klasse Inhalt löst das Problem nicht.
Wäre nett, wenn mir jemand helfen könnte.
Viele Grüße,
schiese
ich möchte ein Koordinatensystem zeichnen und Punkte einzeichnen. Beides klappt auch super. Nun wollte ich als nächstes die Achsen beschriften. Die x-Achse habe ich hinbekommen, bei der y-Achse hänge ich jetzt schon einige Stunden fest. Ich habe Quelltext hier aus dem Forum gefunden (http://www.tutorials.de/threads/graphics2d-string-vertikal-zeichnen.205499/#post-1063737). Das Problem dabei ist, dass er mir den gesamten Inhalt des JFrames dreht. Also auch die Koordinaten der Punkte werden gedreht. Eingebunden habe ich es so:
Start
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Start extends JFrame {
private static final long serialVersionUID = -3330800293328098089L;
JPanel panel;
public Start()
{
this.add(new MenueLinks(), BorderLayout.WEST);
this.add(new Inhalt(),BorderLayout.CENTER);
this.setSize(new Dimension(800,600));
this.setLocationRelativeTo(null);
this.setVisible(true);
}
/*
JFrame frame;
public Start()
{
this.setSize(new Dimension(800,600));
this.setLocationRelativeTo(null);
this.add(new Inhalt());
this.setVisible(true);
}
*/
public static void main(String[] args)
{
new Start();
}
}
Inhalt
Java:
import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import javax.swing.JPanel;
public class Inhalt extends JPanel {
private static final long serialVersionUID = -1617380958931060319L;
int[] yWerte = {2,6,8,9,3,5,7,6,3,5,7,4,2};
private int abstandWerteXAchse;
private double abstandWerteYAchse;
private final int abstandBeschriftungXAchse = 5;
private double yMax = 0;
private final int abstandGitterRand = 30; // Abstand der durchgezogenen Linien senkrecht zum JPanel
private final int minAbstandAchseJPanel = 20; // Minimaler Abstand des Endes der Korrdinatenachse zum Panelrand
private String beschriftungXAchse;
private String beschriftungYAchse;
private int laengeBeschriftungXAchse;
private int laengeBeschriftungYAchse;
public Inhalt()
{
this.setBackground(Color.WHITE);
this.beschriftungXAchse = "X-Achse oder ein längerer Text!";
this.beschriftungYAchse = "Y-Achse";
}
public void paint(Graphics g)
{
zeichnenKoordinatensystem(g);
zeichnenPunkte(g);
g.drawString("Breite: "+this.getSize().getWidth()+" Höhe: "+this.getSize().getHeight(), 0, 200); // Anzeige der Größe des JPanels
// Zeichnen der Punkte ##############################################################################################################
// g.drawString(Integer.toString(abstandWerteXAchse)+ " "+Double.toString(abstandWerteYAchse)+" yMax: "+Double.toString(yMax)+" Höhe: "+fm.getHeight()+" "+Integer.toString((int)(this.getSize().getHeight() - abstandBeschriftungXAchse - fm.getHeight())),300,100);
}
public void zeichnenKoordinatensystem(Graphics g)
{
Graphics2D g2d = (Graphics2D)g;
g.drawLine(0 + abstandGitterRand, 0 + minAbstandAchseJPanel, 0 + abstandGitterRand, (int)(this.getSize().getHeight() - abstandGitterRand)); // Zeichnen der y-Achse
g.drawLine(0 + abstandGitterRand, (int)(this.getSize().getHeight() - abstandGitterRand), (int)(this.getSize().getWidth() - minAbstandAchseJPanel), (int)(this.getSize().getHeight() - abstandGitterRand)); // Zeichnen der x-Achse
// Beschriften der Achsen
FontMetrics fm = g.getFontMetrics();
//X-Achse
g.drawString(beschriftungXAchse, (int)((this.getSize().getWidth() - abstandGitterRand - minAbstandAchseJPanel) / 2 + abstandGitterRand - fm.stringWidth(beschriftungXAchse) / 2), (int)(this.getSize().getHeight()-abstandBeschriftungXAchse));
//Y-Achse
AffineTransform at = AffineTransform.getRotateInstance(Math.toRadians(-90), 200,200);
// Graphics2D g2d = (Graphics2D) getGraphics();
g2d.setTransform(at);
g.drawString("www.tutorials.de", 200,200);
}
public void zeichnenPunkte(Graphics g)
{
// Ermitteln der Abstaende zwischen zwei aufeinanderfolgenden X-Werten der Punkte
abstandWerteXAchse = (((int)this.getSize().getWidth() - abstandGitterRand - minAbstandAchseJPanel) - ((int)this.getSize().getWidth() - abstandGitterRand - minAbstandAchseJPanel) % yWerte.length) / yWerte.length;
// Bestimmung von Y-Max
for(int i = 0; i < yWerte.length; i++)
{
if (yWerte[i] > yMax)
{
yMax = yWerte[i];
}
}
// Ermitteln der Abstaende zwischen zwei aufeinanderfolgenden Y-Werten der Punkte
abstandWerteYAchse = (((int)this.getSize().getHeight() - abstandGitterRand - minAbstandAchseJPanel) - ((int)this.getSize().getHeight() - abstandGitterRand - minAbstandAchseJPanel) % yMax) / yMax;
// Zeichnen der Punkte
for (int i = 0; i < yWerte.length; i++)
{
g.drawOval(abstandGitterRand + (i * abstandWerteXAchse) - 1, (int)(minAbstandAchseJPanel + (yMax - yWerte[i]) * abstandWerteYAchse) - 1, 2, 2); // Die Kreise haben einen Durchmesser von 2 Pixeln. Um sie genau auf dem Punkt zu zeichnen, muss von deren x- und y-Position jeweils 1 Pixel abgezogen werden!
}
}
}
Was mir bei diesem Code auch auffiel: die neuen Koordinaten scheinen nicht mehr auf das JPanel bezogen zu sein. Bei g2d.drawString("",0,0) verschwindet das gedrehte Bild aus dem JPanel.
Ein zweites Problem, welches ich nicht gelöst bekomme ist, dass ich den Hintergrund des JPanels gerne weiß hätte. Der Aufruf von
Java:
this.setBackground(Color.WHITE);
Wäre nett, wenn mir jemand helfen könnte.
Viele Grüße,
schiese
Zuletzt bearbeitet von einem Moderator: