Toon posts:

[Java] eigen mouseevents, hoe?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goeden...

Situatie :
Eigen Component dat op het scherm een area representeerd. Component implementeerd een mouseListener om te reageren om input.

Probleem :
Op dit moment is het zo dat events zoals mouseEntered en mouseExited "vast" zitten aan de bounding-box (altijd een rechthoek) van het Component.
Het is de bedoeling dat het Component pas reageert op het moment dat de muis zich over de area bevindt.

Oplossingen :
- Implementeer de mouseListener in het Component. In de implementatie van mouseEntered (enz) controleer je eerst of de muis zich in de area bevindt.
Deze oplossing is het meest eenvoudig om te coden, maar met deze oplossing krijg je dode punten.
De muis bevind zich dan niet over de area van een Component, maar zit nog wel in de bouding-box, als er dan een Component onder ligt krijgt het andere Component dus de mouseEvent niet, terwijl dat wel zo had moeten zijn.

- Implementeer de mouseListener in de Container waar de componenten aan toegevoegd worden.
Met deze oplossing heb je geen dode punten meer. Maar je verliest het voordeel van de methode mouseEntered en mouseExited.
Je zal nu zelf moeten gaan bijhouden ergens of dat je een Component entered of exit, er zal dus het een en ander aan administratie bij komen.
(Deze oplossing is ook trager omdat je alle component door zal moeten lopen om te checken of je met je muis er over heen zit.)

- Custom mouseEntered en mouseExited
Weet niet precies hoe ik dit moet noemen (en of het uberhaubt kan). Het id is om er voor te zorgen dat de mouseEntered en mouseExited
pas worden aangeroepen als je over de area zit. Je zal dus op de een of ander manier invloed moeten kunnen uitoeven wanneer een
event afgevuurd wordt (in dit geval dus een mouseEvent met als ID mouseEntered).
Dit lijkt mij de beste oplossing, maar ik weet niet hoe die geimplementeerd zou moeten worden.

- Andere oplossingen ???

Ik hoop dat het een beetje duidelijk wat het probleem is, zoniet dat zal ik proberen om het nog verder toe te lichten.

Verwijderd

Topicstarter
Ok, iedereen bedankt voor de hulp ;)
Ik heb het ondertussen opgelost en wel op de volgende manier.

- Andere oplossingen.
De mouseEvent gebruitk de inside(int x, int y) en de contains(int x, int y) om te controleren of de muis zicht over/binnen een Component bevindt. Door deze 2 methoden te overriden met een check of de muis zicht binnen een Area bevindt ipv de default boundig-box van het Component is het probleem opgelost.

Volgens mij is dit de beste oplossing voor dit probleem, maar mocht iemand nog iets beters weten hou ik me altijd voorbehouden !

(Van mij mag het topic op slot nu...)