Zones cliquables non rectangulaires sur une image

Signaler
Messages postés
3
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
17 février 2010
-
Messages postés
3
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
17 février 2010
-
Bonjour à tous,

Je suis probablement ce que l'on peut appeler un débutant en Java par ici, même si j'ai suivi pas mal de cours.

Dans le cadre d'un projet, je cherche à diviser une image (ici une carte de la Suisse) en différentes zones cliquables (chaque région/canton), afin de pouvoir leur attribuer des mouselisteners! Pour être plus précis, le but est de créer un Risk (le jeu de stratégie) sur une carte de la Suisse.

J'ai cherché par-ci par là mais je ne dois pas avoir la bonne méthode de recherche, car je n'ai rien trouvé. J'ai trouvé, par exemple, comment créer une zone rectangulaire cliquable, mais dès qu'il s'agit d'une zone polygonale...je sèche un peu! Y a t'il un moyen de définir (si possible graphiquement, mais s'il faut créer le polygone pixel par pixel je le ferai au stade ou j'en suis :P ) une zone ?

J'ai songé à considérer chaque région comme un JPanel, mais là pareil, je ne trouve rien pour qu'un JPanel prenne la forme d'une image...(que je peux découper sur photoshop, donc faudrait que les JPanel se superposent, puisqu'à ma connaissance, une image est toujours dans un rectangle !! ) Pis après pour aligner tout ça en absoluteLayout, ça sent le calvère !

Merci de votre lecture et d'avance de votre aide conceptuelle :) Si je n'ai pas été clair n'hésitez pas! Si vous voyez une autre façon de gérer chaque pays (y a juste des mouseListener et 2-3 informations dessus, genre nombre d'armées), n'hésitez pas! Je bloque là..

3 réponses

Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
Salut, à ta place, je ferais un JPanel par région.

Pour chaque région (JPanel) tu mets le background en transparent avec un setOpacity(false).

Pour gérer la zone de "clic" tu surcharges la méthode contains(x, y) - le problème est de répondre rapidement, soit en enregistrant dans un HashSet tous les Point de chaque région, (ça prend beaucoup de mémoire!! et ça va te demander du boulot). Sinon tu peux représenter chaque région par un polygone ( classe Polygon qui présente l'avantage d'implémenter la méthode contains ), je ne l'ai jamais utilisée. Bon courage!
Messages postés
3
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
17 février 2010

Salut!

Je m'essaye actuellement au Polygon, en implémentant des mouseListeners ça devrait faire l'affaire =)

C'est juste que modéliser une carte d'un pays à la main, ça va être long! :D
Je vais voir si j'arrive pas à créer les zones sur toshop et récupérer des coordonnées pour pas trop souffrir :P


Merci de ton aide!
Messages postés
3
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
17 février 2010

Finalement j'ai décidé d'essayer avec une image vectorielle!
J'utilise une librairie "SVG Salamander" qui a l'air pas mal, et j'ai trouvé une carte .SVG (donc XML) que j'ai pu bidouillé pour faire des zones comme je l'aimerai!

J'en suis rendu à essayer de comprendre comment je vais gérer des mouseListener sur les zones, mais vu qu'elles sont définies par de l'XML ça doit être possible et ça me parait plus propre dans la méthode!