Entra

View Full Version : [JAVA]forme irregolari sorgenti di eventi


cerbug
13-11-2007, 22:09
Salve saluto tutti,
sono nuovo del forum, è il mio primo quesito:
normalmente tutti gli oggetti grafici bottoni, caselle di testo ecc hanno sempre un area di forma più o meno rettangolare all'interno della quale sono inscritti e che è sensibile alle varie azioni. Esempio quando entro in quest'area con il mouse l'oggetto a cui appartiene lancia un evento che verrà raccolto e processato dal relativo listener associato. Ora vorrei sapere se è possibile creare degli oggetti, forme giometrice irregolari... che abbiano un'area sensibile non rettangolare ma della stessa forma dell'oggetto in modo tale che per es. se ho un oggeto a forma di stella verra lanciato un evento mouseEntered solo se entro dntro la stella e non nel rettangolo dove essa è inscritta.
In altre parole c'è modo di far emettere eventi a delle figure geometriche disegnate solo all'interno della loro propria forma?
Grazie per la eventuale risposta.

banryu79
15-11-2007, 09:22
Ciao,
purtroppo non so risponderti direttamente, perchè non sono un esperto, ma credo che potresti trovare in questo estratto di testo un utile indizio:

3.2.2 Bounds and Hit Testing

A bounding box is a rectangle that fully encloses a shape’s geometry. Bounding boxes are used to determine whether or not an object has been selected or “hit” by the user.

The Shape interface defines two methods for retrieving a shape’s bounding box, getBounds and getBounds2D. The getBounds2D method returns a Rectangle2D instead of a Rectangle, providing a higher-precision description of the shape’s bounding box.

Shape also provides methods for determining whether or not:

* A specified point lies within the bounds of the shape (contains)
* A specified rectangle lies totally within the bounds of the shape (contains)
* A specified rectangle intersects the shape (intersects)



L'ho ricavato dalla guida introduttiva a Java2D presente nei Javadocs inclusi con la JDK.

Se qualcuno più esperto passa di qua e legge magari sa darti indicazioni più precise :D

banryu79
16-11-2007, 09:27
...credo che in sostanza potresti fare qualcosa del genere:

1) intercetti l'evento che scatta quando il puntatore del mouse entra nel BoundingBox del tuo oggetto grafico

2) a quel punto intervieni recuperando la Shape dell'oggetto grafico

3) la Shape recuperata, assieme alle coordinate della posizione del puntatore del mouse, diventano i parametri da passare ad un metodo che calcola se le coordinate (del puntatore) sono dentro la Shape.
A quel punto sai se l'evento "sono dentro l'oggetto grafico" va effettivamente lanciato o se va ignorato...


La parte critica è il punto 3) ma appunto vedi se la Shape ti mette già lei a disposizione un metodo che ti fa il lavoro, sennò devi implementare tu un metodo del genere....

Nel secondo caso guarda qui (http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html) per un'idea su come si fa a testare un punto e verificare se è dentro o fuori un generico poligono...