ist das Koordinatensystem von Zeichenebene und Mouseposition verschoben ?

Markus_667

Aktives Mitglied
Hallo Zusammen,
ich komme hier leider nicht weiter, daher komme ich um eine Frage hier im Forum nicht herum.
Ich lasse einen JFrame Zeichnen und melde MouseListener an.
Folgend frage ich die Position der Maus in JFrame ab und lasse an dieser Stelle ein Viereck zeichnen. Das Viereck kommt in eine ArrayList. Danach Prüfe ich ob die Maus beim nächsten Klick innerhalb des Vierecks ist. Nur leider ist das Viereck um x = 18 und y = 40 Pixel verschoben !!
Ist das normal und wenn ja wie kann ich es kompensieren ?
Klar ich könnte das auf die Abfrage der Maus Position drauf rechnen aber das ist mir zu unsauber.
Könnte es sein, dass ich einen LayoutManager oder ähnliches vergessen habe ?
Oder habe ich den MouseListener an der falschen (evtl auch unterschiedlichen) Komponente angemeldet, so das beim Ausgabefenster der obere Rand (Obere Leiste mit _ O X) mit gerechnet wird aber nicht beschreibbar ist.

Ich bin darauf gestoßen da meine .contains Methode immer false aufgegeben hat, als ich Prüfen wollte ob die Maus über dem Viereck ist.

Ist mehr Code daher habe ich nur die hoffentlich relevanten Sachen eingeblendet.

Java:
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setVisible(true);
        DrawingArea zeichenbrett = new DrawingArea();
        frame.add(zeichenbrett);
        Mouse_Handler handler = new Mouse_Handler(zeichenbrett);  // Hier wird die Drawing Area an den Mouse Handler übergeben.
        frame.addMouseListener(handler);
        frame.addMouseMotionListener(handler);
        frame.addKeyListener(handler);
Java:
public DrawingArea() {
        System.out.println("DrawingArea Konstruktor");
        setPreferredSize(new Dimension(500, 500));
        transitionen = new ArrayList<Rectangle2D>();
        stellen = new ArrayList<Ellipse2D>();
        kanten = new ArrayList<Line2D>();
        transitionen.add(new Rectangle2D.Double(10, 10, 30, 30));
        System.out.println("Inhalt der ArrayList: " + transitionen.size());
    }

    public void addTransition(int x, int y) {
        System.out.println("addTransition Methode");
        transitionen.add(new Rectangle2D.Double(x, y, 30, 30));
        System.out.println("Inhalt der ArrayList: " + transitionen.size());
        repaint();
    }
Java:
public void mouseClicked(MouseEvent e) {
        System.out.println("clicked");
        if ((SwingUtilities.isLeftMouseButton(e)) && (transition == true)) {
            // graphikElement.addTransition((e.getX() - 30), (e.getY() - 30));
            graphikElement.addTransition((e.getX()), (e.getY()));
        }
    }
public void mousePressed(MouseEvent e) {
        System.out.println("pressed");
        mousePoint = e.getPoint();
        System.out.println("Mauspoint: " + mousePoint);
        System.out.println("contains: " + (graphikElement.getTransitionen().contains(mousePoint)));
        for (int size = 0; size < graphikElement.getTransitionen().size(); size++) {
            System.out.println(graphikElement.getTransitionen().size());
            System.out.println("" + (graphikElement.getTransitionen().get(size).getBounds2D()));
            if (graphikElement.getTransitionen().get(size).contains(mousePoint)) {
                System.out.println("contains point");
            } else {
                System.out.println("not contains point");
            }
        }
    }

Wie immer schon mal vielen Dank für die Hilfe
 

Markus_667

Aktives Mitglied
Ich bin selbst drauf gekommen. Ich muss die MouseListener an dem "zeichenbrett" also dem Panel anmelden und nicht am Frame...
Kleiner Fehler aber große Wirkung.
Trotzdem Danke.
 

Ähnliche Java Themen

Neue Themen


Oben