Zum Inhalt springen

Zeichnen in Swing Applikation


Empfohlene Beiträge

Geschrieben

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

Geschrieben

hallo!

du mußt dich selber darum kümmern, dass deine linien wieder gezeichent werden.

erbst du von jpanel oder ähnlichem? dann überlade die 'paint(Graphics g)' methode.

ich empfehle dir, von deinen linien 'shapes' zu erstellen und diese dann zu speichern. dafür schau dir mal die klasse 'AffineTransform' an. wenn du das so implemetierst, dann kannst du deine linien auch verschieben, zoomen, usw...



classMyClass extends JPanel{


  Vector<Shape> shapes = new Vector<Shape>();


  .....


  @Override

  public void paint(Graphics g){

      super.paint(g);

      Graphics2D g2d = (Graphics2D)g;

      for(Shape s:shapes){

        g2d.drawShape(s);

      }

  }

}

bigredeyes

Geschrieben

Hi bigredeyes!

Vielen Dank für deine Hilfe. Werde mir das mit den Shapes nachher mal angucken und mich dann noch mal melden, wenn es geklappt hat.

MFG blueJ

Geschrieben

Hi!

Mit den Shapes war ein super Tip. Hab es jetzt geschafft, dass die Linien und Strings nicht verschwinden. Speicher alles in ArrayListen.


	public void drawStrecke(int grad, int strecke, String movement)

	{			

		Point nPoint = new Point();		


		if (movement.equals("Links"))

		{			

			oGrad = oGrad + grad;

			//g2.fillOval(oPoint.x-5, oPoint.y-5, 10, 10);

			shapes.add(new Ellipse2D.Double(oPoint.x-5, oPoint.y-5, 10, 10));

			//g2.drawString(grad+"°", oPoint.x-25, oPoint.y+15);

			nxtString.add(new NxtString(grad, oPoint.x-25, oPoint.y+15));


		}	

		if (movement.equals("Rechts"))

		{			

			oGrad = oGrad - grad;

			//g2.fillOval(oPoint.x-5, oPoint.y-5, 10, 10);

			shapes.add(new Ellipse2D.Double(oPoint.x-5, oPoint.y-5, 10, 10));

			//g2.drawString(grad+"°", oPoint.x+5, oPoint.y+15);

			nxtString.add(new NxtString(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();			

			shapes.add(new Line2D.Double(oPoint.x,oPoint.y,nPoint.x,nPoint.y));

			oPoint = nPoint;

		}


		repaint();

	}

Thema kann also geschlossen werden.

Und danke nochmal.

MFG

blueJ

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...