Java Netbeans Hilfe TSP; User Punkte setzen

Hallo Zusammen,

Ich habe erstmal eine ganz einfache Frage. nur nicht für mich einfach. Ich habe in ein Label ein ICon eingefügt, eine Deutschlandkarte. nun will ich das der User auf die Karte klicken kann und dann dort ein Punkt zu sehen ist. Später will ich das ich den und die anderen Punkte die er so klickt al koordinaten haben.

um ganz zum schluss ein Fertiges Java Swing Applet mit dem Problem des Handlungsreisenden (TSP) zu haben.

vllt kan nmir jemand helfen

Gruß

Also ich verstehe von dem, was du da willst bahnhof.
Vielleicht erklärst du das nochmal etwas genauer?
Etwas Code wäre auch von Vorteil.

Du musst erstmal das Klickevent abfangen, wenn du das Event hast kannst du dir die Position holen und wenn du die Paint Methode überschrieben hast kannst du an der Stelle malen was du willst.

Welche Koordinaten meinst du? Die auf dem Bild oder die realen Koordinaten?

Ich hab noch nie viel mit GUIs gemacht, deswegen mal ne Frage am Rande: warum macht man das Bild in ein Label? Ich hätte jetzt einfach ein Panel erstellt und dort das Bild reingezeichnet. Nen MouseListener oder sowas dazu und dann kann man in über das Maus Event die Koordinaten abfragen.

Jo habe jetzt auch Das Label in ein Panel geändert nun fäählt mir noch die erfahrung und das wissen wie ich ein Listener mache und dann die Koordinaten abfrage

einfach

......
});

Jede Methode bekommt ja ein Event und das Event weiß von welcher Position es kommt.

Ich habe dir hier mal ein fertiges Applet zusammen gestellt, welches demonstriert, wie Mausklicks gesammelt und auf einem Panel gezeichnet werden.

Das gesamte Material samt Bild und Quelldateien findest du im Anhang.

Das Applet

import java.awt.*;
import java.net.*;

public class MapApplet extends JApplet {
   public void init() {
      setLayout(new BorderLayout());
      
      URL url = null;
      try {
         url = new URL(getCodeBase()+"/karte_de.gif");
      }
      catch(MalformedURLException e) {
         e.printStackTrace();
      }
      
      Image img = getImage(url);
      add(new PicturePanel(img), BorderLayout.CENTER);
   }
}```

Ein Panel, auf welchem gezeichnet wird:
```import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class PicturePanel extends JPanel {
   private int x, y;
   private Image img;
   private PointList points;

   public PicturePanel(Image img) {
      this.img = img;
      points = new PointList();
      
      addMouseListener(new MouseAdapter() {
         public void mousePressed(MouseEvent e) {
            x = e.getX();
            y = e.getY();
            points.addPoint(new Point(x, y));
            repaint();
         }
      });
   }
   
   public void paintComponent(Graphics g) {
      super.paintComponent(g);
      if(img != null) {
         g.drawImage(img, 0, 0, this);
      }
      
      g.setColor(Color.RED);
      for(int i = 0, j = points.size(); i < j; i++) {
         Point p = points.get(i);
         g.fillOval(p.x-3, p.y-3, 5, 5);
      }

   }
}```

Eine Klasse, die die Punkte sammelt:
```import java.util.*;
import java.awt.*;

public class PointList {
   private java.util.List<Point> list;
   
   public PointList() {
      list = new ArrayList<Point>();
   }
   
   public void addPoint(Point p) {
      list.add(p);
   }
   
   public void removePoint(Point p) {
      list.remove(p);
   }
   
   public Point get(int i) {
      return list.get(i);
   }
   
   public int size() {
      return list.size();
   }
}```

Die HTML-Datei:
[XML]<html>
 <head>
  <title>MapApplet-Applet</title>
 </head>
 <body>
  <applet code="MapApplet.class" width="500" height="500">
  </applet>
 </body>
</html>[/XML]