Hallo zusammen!
Dies ist meine erster Beitrag in diesem Forum.
Daher erst mal "Hallo" an alle.
So nun zu meinem Problem:
Ich habe eine Klasse geschrieben, die ich von JPanel ableite. In dieser Klasse überschreibe ich die Methode paintComponent(Graphics g);. Wenn ich etwas in der Methode zeichne wird auch alles angezeigt.
Ich habe einen Button mit dem ich einige Linien in das JPanel zeichne, dass klappt auch alles soweit.
Wenn ich aber z.B. das Fenster meiner Applikation minimiere und wieder aufrufe sind die Striche, die ich zur Laufzeit gezeichnet habe, wieder weg.
Ich habe herausgefunden, dass bei jedem Neuaufruf des Fensters wieder die paintComponent-Methode aufgerufen wird, womit meine gezeichneten Striche natürlich wieder überzeichnet werden.
Meine Frage:
Gibt es eine Möglichkeit, meine gezeichneten Linien auszulesen und wieder zu zeichnen, wenn das Fenster neu aufgerufen wird.
Habe es schon mit g2 = (Graphics2D)getGraphics(); probiert. Es wird mir jedoch nur ein leeres Panel gezeichnet.
Mein paint-Methode:
public void paintComponent (Graphics g)
{
Dimension dim = getSize();
if(!start)
{
oPoint.x = dim.width/2;
oPoint.y = dim.height - 30;
}
super.paintComponent(g);
g2 = (Graphics2D) g;
g2.setPaint(Color.white);
g2.fill3DRect(10, 10, dim.width - 20, dim.height - 20, true);
g2.setColor(Color.black);
g2.setStroke(new BasicStroke(6.0F));
Line2D.Double linie1 = new Line2D.Double(oPoint.x-50, oPoint.y-20, oPoint.x+50, oPoint.y-20);
Line2D.Double linie2 = new Line2D.Double(oPoint.x-50, oPoint.y-20, oPoint.x-50, oPoint.y+10);
Line2D.Double linie3 = new Line2D.Double(oPoint.x+50, oPoint.y-20, oPoint.x+50, oPoint.y+10);
g2.draw(linie1);
g2.draw(linie2);
g2.draw(linie3);
g2.setColor(Color.green);
g2.setStroke(new BasicStroke(3.0F));
Ellipse2D.Double there = new Ellipse2D.Double(oPoint.x-10, oPoint.y-10, 20, 20);
g2.fill(there);
start = true;
}
Meine Methode zum zeichnen einer Strecke:
public void drawStrecke(int grad, int strecke, String movement)
{
g2 = (Graphics2D)this.getGraphics();
Point nPoint = new Point();
g2.setColor(Color.red);
if (movement.equals("Links") )
{
oGrad = oGrad + grad;
}
if (movement.equals("Rechts"))
{
oGrad = oGrad - grad;
}
if (movement.equals("Links"))
{
g2.fillOval(oPoint.x-5, oPoint.y-5, 10, 10);
g2.drawString(grad+"°", oPoint.x-25, oPoint.y+15);
}
if (movement.equals("Rechts"))
{
g2.fillOval(oPoint.x-5, oPoint.y-5, 10, 10);
g2.drawString(grad+"°", oPoint.x+5, oPoint.y+15);
}
if (movement.equals("Gerade"))
{
nPoint.x = new Double(oPoint.x+(Math.sin(Math.toRadians(oGrad))*strecke)).intValue();
nPoint.y = new Double(oPoint.y+(Math.cos(Math.toRadians(oGrad))*strecke)).intValue();
g2.setStroke(new BasicStroke(3.0F));
g2.draw(new Line2D.Double(oPoint.x,oPoint.y,nPoint.x,nPoint.y));
oPoint = nPoint;
}
g2 = (Graphics2D)this.getGraphics();
//System.out.println(oGrad);
//System.out.println(oPoint);
//System.out.println(nPoint);
}
Vielen Dank im voraus.
MFG
blueJ