MouseEntered mit X und Y Koordinaten

HiImSkulte

Mitglied
Hallo liebe Community,
ich bin gerade dabei, etwas in Java herumzutesten, und bin auf ein Problem gestoßen, wobei ich nicht weiß, wieso es so ist oder wie ich es lösen soll, da Google Recherche nichts gebracht hat. (Trifft nicht auf mein spezielles Programm zu)

Und zwar,
im mouseMoved Event wird nach der X und Y Koordinate abgefragt um die Position des Cursors zu ermitteln.
Nun kann ich mit folgendem Code bei mouseClicked, mousePressed und mouseReleased bequem abfragen ob sich die Maus auf einem Knopf oder ähnlichem befindet und eine Anweisung reinschreiben:
Java:
@Override
    public void mouseClicked(MouseEvent e) {
        if ((mousex >= 200 && mousex <= 400) && (mousey >= 50 && mousey <= 150)) {
            playClicked = true;
        }
    }
Wenn ich allerdings die gleiche If-Abfrage bei mouseEntered reinschreibe, passiert nichts.

Meine Frage:
Kann ich bei mouseEntered mit X und Y Koordinaten des Mauszeigers eine Anweisung ausführen lassen?

Dieser Code funktioniert nicht:
Java:
public void mouseEntered(MouseEvent e) {
        if ((mousex >= 200 && mousex <= 400) && (mousey >= 50 && mousey <= 150)) {
            playClicked = true;
        }   
    }

Mein Ziel ist es, dass wenn der Cursor über einen Knopf geht, die Farben von dem Knopf geändert werden.
Ich hoffe es war verständlich formuliert, danke für Rückmeldungen! 🙂
 
Hey HiImSkulte,

nicht so kompliziert denken. Die Koordinatenabfrage macht die Methode schon intern für dich! 🙂
Du musst nur prüfen welche Komponente es ist.

Also bspw:

Java:
public void mouseEntered(MouseEvent e)
{
     if(e.getSource() == mySuperCoolButton)
     {
            mySuperCoolButton.setBackground(Color.RED);
     }
}

Gruß
Robert
 
@Robat
Habe den Button einfach per g.fillRoundRect(...); gemacht. (Graphics = g), deswegen wollte ich es per X und Y machen weil ich doch keine Variable für der Button festlegen kann.
Danke!
 
Hast du alle deine Rechtecke in einer Klasse oder für jedes Rechteck eine eigene gemacht?

Wenn du zB alle in einer Klasse hast, bräuchtest du nur die Methode mouseMoved. Die trackt ja jede Bewegung auf der grafischen Oberfläche deiner Klasse.
 
Habe mousex und mousey von der mouseMoved Methode, und habe alle Rechtecke und was gezeichnet wird in einer anderen Klasse. Bei mouseMoved macht er es aber nur wenn sich die Maus auf dem Knopf hin und her bewegt. Bei mouseEntered aber in einem Bereich dauerhaft bis sie wieder rausgeht.

Gruß Skulte
 
Also, meine mouseMoved Methode:
Java:
public static void mouseMoved(mouseEvent e) {
     mousex = e.getX();
     mousey = e.getY();
}

Habe es jetzt hinbekommen, mit folgendem Code:
Java:
    public void mouseMoved(MouseEvent e) {
        mousex = e.getX();
        mousey = e.getY();
       
        // update button hovered
        if ((mousex >= DrawObjects.menuButtonBackgroundX && mousex <= DrawObjects.menuButtonBackgroundX + 50) && (mousey >= 18 && mousey <= 68)) {
            DrawObjects.menuButtonBackground = 0xF2F2F2;
            DrawObjects.menuButtonLines = 0x3E3E42;
        } else if ((mousex != DrawObjects.menuButtonBackgroundX && mousex != DrawObjects.menuButtonBackgroundX + 50) && (mousey != 18 && mousey != 68)) {
            DrawObjects.menuButtonBackground = 0x3E3E42;
            DrawObjects.menuButtonLines = 0xF2F2F2;
        }
    }

Danke! 🙂
 

Zurück
Oben