MouseListener auf DrawLine in AWT

KarlPichler

Mitglied
Hallo Java Profis,

(Java 1.1.8)
Ich habe ein Programm erstellt welches Linien und Kreise zeichnet.
Nun möchte ich wenn man mit der Maus über eine Linie fährt, das diese in einer anderen Farbe eingeblendet wird. Bei Anklick sollten sich danach sämtliche optionen einblenden.

Alles halb sowild, allerdings habe ich null Plan wie ich den Maus-Listener implementieren muss. Ich bitte daher um eure Unterstüzung. Beispielcode wäre vom Feinsten.

Eine weitere Frage: kann ich die Strichstärke einer Linie irgendwie modifizieren? (Ich arbeite mit AWT in der Java Version 1.1.8)

lg
 
Hi,
ich würde das folgendermaßen machen. Ersteinmal der MouseMotionListener - für die Mausbewegung.
Java:
public void mouseMoved(MouseEvent e) {
   final int x = e.getX();
   final int y = e.getY();	

   for(MyLine line : lineList) {
      if(line.contains(x, y)) {
         line.setColor(Color.RED); // Wenn Maus über der Linie ist
      } else {
         line.setColor(Color.BLACK); // Wenn Maus wo anders ist
      }
   }
}
Dann die MyLine-Klasse:
Java:
public class MyLine extends Line2D {
   private Color c = Color.BLACK;

   // ...

   public void setColor(Color c) {
      this.c = c;
   }

   public Color getColor() {
      return c;
   }
}
Ich denke mal, dass das eine recht komfortable Lösung ist. Falls du Fragen dazu haben solltest, zögere nicht. ;)

ps.: Ob das so auch in der Java 1.1.8 Version geht, weiß ich nicht, da ich das nicht testen konnte.

Gruß

Fabio
 
Hallo,
Danke erstmals für die rasch antwort!
So nun bekomme ich die momentane Position der Maus mit, ich kann auch ein Event auslösen (großer Erfolg für Java Idioten ;)).
Wie kann ich nun die Linien in eine Liste schreiben? mein Problem ist das ich etwas Toleranz (2-3 Pixel) benötige, ich meine damit das wenn er 2pixel neben die Linie klickt, auch als ein Treffer gewertet wird!
lg
 
Also die MyLine-Klasse in eine Liste bekommen geht ganz einfach:
Java:
List<MyLine> lineList = new ArrayList<MyLine>();
// ...
lineList.add(new MyLine(x, y, x1, y1));

Um eine Toleranz zu ermöglichen wirst du wahrscheinlich die Methode "contains(x, y)" von der Super-Klasse "Line2D" überschreiben müssen. Sprich:
Java:
public class MyLine extends Line2D {
   private Color c = Color.BLACK;
 
   // ...

   @Override
   public boolean contains(int x, int y) {
      // Hier deine Berechnung machen
   }
 
   public void setColor(Color c) {
      this.c = c;
   }
 
   public Color getColor() {
      return c;
   }
}

Gruß

Fabio
 

Neue Beiträge

Zurück