bonjour à tous,
je poursuis mon élaboration d'une interface graphique gérant des composants sur une "grille perso".
Comme me l'a suggéré gervais.b, j'essaie de mettre en œuvre une approche MVC et notamment un module "controle" qui reçoit un appel de souris éventuel sur la grille, qui est un "MouseListner" unique. (Les composants déposés sur cette grille sont sans listener).
Quand je clique sur la grille, je teste mes composants avec la méthode "findComponentAt".
En effet, cette méthode renvoie de composant lui-même si il contient effectivement les coordonnées (x,y) du clic, passées en paramètres, et sinon, elle renvoie "null".
Mon interface ressemble à ça :
Pour tester la méthode, je fais un essai avec le composant "r_5", et le code :
, et je clique ensuite "un peu partout" sur mon interface...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public static void clic_sur_grille(Point p) { System.out.println("je clique sur la grille sur la grille : " + p); Component cible; cible = Grille.recept[5].findComponentAt(p); System.out.println(" le composant détecté est : " + cible);
Je pensais que, lorsque je clique sur la grille, ailleurs que sur le composant "r_5", j'allais récupérer "null" et que si je clique sur le composant "r_5", ce dernier serait détecté et affiché dans la console de contrôle.
La difficulté est que cela fonctionne uniquement pour un clic correspondant à la surface du composant, mais à partir des coordonnées (0,0) de la grille, alors que "r_5" est bien localisé en (384,204). Le problème est représenté ci-dessous :
Ma stratégie de détection des composants par le module de contrôle étant basée sur une grille "unique sur écoute" et une déduction par traitement du composant visé,
quelqu'un peut-il me dire pourquoi cette détection basée sur les coordonnées (0,0), et ce, quel que soit le composant et où qu'il se situe, même si cette détection respecte bien la surface du composant???
Si pas de solution, quelle nouvelle statégie peut-être possible pour ce type d'application??
Merci à tous ceux qui prendront la peine d'y réfléchir et de me répondre....
Partager