Linien in JPanel zeichnen

llabusch

Mitglied
Hallo meine lieben Leute,

hier erstmal mein Code:

Java:
private void koordinatenFeldZeichnen() {

		zeichenFeld.setPreferredSize(new Dimension(xWert, yWert));
		zeichenFeld.setVisible(true);

		int ziel = 1;
		for (int start = 0; start < route.size(); start++) {

			
			zeichenFeld.paint(g);
			
		}

		JDialog dialog = new JDialog();

		dialog.add(zeichenFeld);
		dialog.pack();
		dialog.setVisible(true);

	}

Ich möchte gerne in dieser Schleife die Objekte durchgehen in denen jeweils X & Y Koordinaten enthalten sind. Also die sind natürlich da. Aber wie kann ich iterativ die Linien (soll eine Route visualisieren) in das Panel zeichnen lassen?


LG
 
Das ganze musst du uns besser erklären. Am bessten mal ansagen wie die Route gespeichert ist (ArrayList ?)
Wenn ich es "richtig" verstanden habe, hast du eine Liste mit verschiedenen Punkten und du willst nun einfach alle mit einander verbinden, also der Reihe nach ?

mfg Major
 
Wie genau sieht denn dein erweiterte JPanel Klasse aus? Um eine Route zu zeichnen, könnte sich vielleicht ein Polygon eignen. Dazu benötigst du dann ein Array mit den entsprechenden x-und y-Koordinaten. Lieben Gruß Latin
 
Das ganze musst du uns besser erklären. Am bessten mal ansagen wie die Route gespeichert ist (ArrayList ?)
Wenn ich es "richtig" verstanden habe, hast du eine Liste mit verschiedenen Punkten und du willst nun einfach alle mit einander verbinden, also der Reihe nach ?

mfg Major


Richtig!

Also ich habe eine ArrayList mit Stadt-Objekten. Diese enthalten den Namen und jeweils die X- & Y-Koordinaten, welche man über getter bekommen kann.

Es soll also der Reihe nach durch die Liste gegangen werden und zwar so:

Von Stadt am "Index 0" zu Stadt am "Index 1" --> von Stadt am "Index 1" zu Stadt am "Index 2" usw.

Dies soll eben alles schön auf einem Panel gezeichnet werden....

Die skallierung habe ich auch berechnen lassen, bedeutet die Maße des Koorinatensystems habe ich schon. Ich brauche wirklich nur die möglichkeit diese Strecken zeichnen zu lassen...
 
Ich weiß nicht, ob ich dich jetzt richtig verstanden haben. 🙂 Habe jetzt selber einmal ganz einfache Stadtobjekte erzeugt und diese in der Klasse Map in Form einer ArrayList verwaltet. Die entsprechenden x- und y-Koordinaten zeichne ich dann und verbinde sie. Vielleicht hilft dir das ja. Ist aber simpel gehalten.


Java:
private class RoutePanel extends JComponent{
		
		@Override
		protected void paintComponent(Graphics g){
			g.setColor(Color.blue);
			
			for(int i=0; i<map.getSize(); ++i){
				g.fillOval(map.getCityElement(i).getX(),map.getCityElement(i).getY(), 5, 5);
				
				if(map.getCityElement(i+1) != null){
					g.drawLine(map.getCityElement(i).getX(), map.getCityElement(i).getY(), 
							map.getCityElement(i+1).getX(),map.getCityElement(i+1).getY());
				}
			}
			
			
			
		}
		
	}
 
Zuletzt bearbeitet:
Super, vielen Dank!!!
Hat genau das gemacht, was es sollte! 🙂

Habe es nur mit einer for-Schleife gelöst:

Java:
	@Override
		protected void paintComponent(Graphics g) {

			Stadt vorherige = null;

			g.setColor(Color.BLUE);

			// Es werden alle Städte einezeichnet und zu der vorherig
			// gezeichneten Stadt eine Linie gezogen.
			for (Stadt stadt : route) {

				g.fillOval((int) stadt.nordkoor, (int) stadt.ostkoor, 10, 10);

				if (vorherige != null) {
					g.drawLine((int) stadt.nordkoor, (int) stadt.ostkoor,
							(int) vorherige.nordkoor, (int) vorherige.ostkoor);
				}

				vorherige = stadt;
			}
		}
 

Zurück
Oben