Hallo miteinander,
ich habe derzeit ein sehr extravagantes Problem, bei dem ich auf keine Lösung mehr komme. Ich zeichne eine Menge Elemente mit Java2D in eine von JPanel abgeleitete Klasse. Das ansich funktioniert so wie es soll, jetzt möchte ich aber diese gezeichneten Elemente mit Events verknüpfen, sprich dass eine Funktion ausgeführt wird, wenn man z.B. eine Linie anklickt.
Ich hab es mit einem eigenen MouseListener versucht, da kennt sich aber nicht einmal der Compiler aus:
Hier nur mal in der absurd-Variante, die bei click einfach nur "blubb" in die Statuszeile schreibt, damit man sehen kann, ob die Funktion überhaupt ausgeführt wird. Mach ich gerne so, bevor ich mir groß um den Aufbau dieser Funktion den Kopf zerbreche. Außerdem ist das eine extrem gekürzte Fassung meines Applets, grade um meine Problemstellung zu beschreiben.
jedoch die Meldung des Compilers:
Funktioniert sowas grundsätzlich nicht, oder mach ich hier irgendwas falsch?
Und falls das nicht möglich ist, wie könnte man es noch lösen?
Schonmal danke fürs durchlesen
ich habe derzeit ein sehr extravagantes Problem, bei dem ich auf keine Lösung mehr komme. Ich zeichne eine Menge Elemente mit Java2D in eine von JPanel abgeleitete Klasse. Das ansich funktioniert so wie es soll, jetzt möchte ich aber diese gezeichneten Elemente mit Events verknüpfen, sprich dass eine Funktion ausgeführt wird, wenn man z.B. eine Linie anklickt.
Ich hab es mit einem eigenen MouseListener versucht, da kennt sich aber nicht einmal der Compiler aus:
Java:
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
public class netEDIT extends JApplet
{
JDrawPanel zeichenpanel = new JDrawPanel();
public void init ()
{
add(zeichenpanel);
}
class JDrawPanel extends JPanel
{
private Graphics2D g2;
JDrawPanel()
{
setBackground(Color.WHITE);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g2 = (Graphics2D) g;
Line2D.Double Linie = new Line2D.Double(50,50,100,100);
Linie.addMouseListener(new MyMouseListener());
g2.draw(Linie);
}
}
class MyMouseListener implements MouseListener
{
public void mouseExited (MouseEvent e) {}
public void mouseEntered (MouseEvent e) {}
public void mouseReleased (MouseEvent e) {}
public void mousePressed (MouseEvent e) {}
public void mouseClicked (MouseEvent e) {showStatus("blubb");}
}
}
jedoch die Meldung des Compilers:
Code:
source/netEDIT.java:861: cannot find symbol
symbol : method addMouseListener(netEDIT.MyMouseListener)
location: class java.awt.geom.Line2D.Double
Linie.addMouseListener(new MyMouseListener());
^
1 error
Funktioniert sowas grundsätzlich nicht, oder mach ich hier irgendwas falsch?
Und falls das nicht möglich ist, wie könnte man es noch lösen?
- Könnte man die Linie beispielsweise in einen Container ablegen und das Signal von diesem auslösen? Müssten dann aber unendlich viele Container möglich sein, für meine Anwendung.
- Ich könnte mir auch vorstellen, einfach einen Klick auf das Panel zu registrieren, bei dem x und y Koordinaten des Mausklicks ausgelesen werden und dann alle Zeichenelemente überprüft, ob diese an besagten Koordinaten liegen. Wär aber unschön, da das mit der wachsenden Anzahl an Zeichenelementen vermutlich etwas langweilig wird.
Schonmal danke fürs durchlesen
Zuletzt bearbeitet: