Comment appeler une fonction lorsque je clique sur un composite (Java)?
Je travaille avec Netbeans IDE en Java.
J'ai un formulaire avec un Composite.
Chaque Composite a un gridLayout 3x3 et dans chaque lieu, il y a une image représentant un nombre[0,1,2,3,4,5,6,7,8](l'image est créée utilisé une classe personnalisée,pas juste à côté de l'image dans un laboratoire).
Je veux être en mesure d'échanger des deux images dans le panneau lorsque l'utilisateur clique dessus (cliquez d'Abord: pas d'action , deuxième clic: passer les deux images intégrée dans le composite Composants).
J'ai déjà créé une fonction exchangeComponents et avec un test de code (comme:
exchangeComponents (0,8,jPanel1)
c'échanges correctement les images situées dans position1 (1ère ligne,1ère colonne) et en position2 (ligne 3,colonne 3).
La fonction d'un creted est la suivante:
public void exchangeComponents(int component1,int component2,JPanel jpanel){
try{
Component aux1 = jpanel.getComponent(component1);
Point aux1Loc = aux1.getLocation();
Component aux2 = jpanel.getComponent(component2);
Point aux2Loc = aux2.getLocation();
aux1.setLocation(aux2Loc);
aux2.setLocation(aux1Loc);
}
catch (java.lang.ArrayIndexOutOfBoundsException ex){ /* error! bad input to the function*/
System.exit(1);
}
}
Je suppose que je ont besoin d'avoir un événement qui appel la fonction exchangeComponents() lorsque l'utilisateur clique sur l'une des images de la jPanel1 mais comment dois-je faire? et comment vérifier quels sont les éléments (images) que l'utilisateur a sélectionné?
Je sais juste que quand je crée un Bouton si un clic sur celui-ci (à partir de l'IDE) d'un événement comme
private void button1ActionPerformed(java.awt.event.ActionEvent evt) {
//some code..
}
est créé et le code que j'remplir est exécutée.
Je vous remercie à l'avance pour tout conseil.
OriginalL'auteur dragonmnl | 2012-04-01
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter le même écouteur de souris à tous vous JLabels ou quel que soit le conteneur que vous avez pour vos images, comme:
etc., alors détecter Jlabel sur lequel vous avez cliqué avec
MouseEvent.getSource();
, à l'instar de ceSi vous n'êtes pas à l'aide de JLabels pour les images, remplacer JLabel dans le code avec ce que vous utilisez...
EDIT: Désolé, je ne pense pas que j'ai fait ce pas clair, mais votre classe avec la méthode exchangeComponents a à mettre en œuvre MouseListener. Puis, dans la mouseClicked événement a mis le code que j'ai donné pour elle. Assurez-vous d'inclure les variables
hasclicked1
etclick1label
dans votre classe. Vous faire la classe à quelque chose comme cecieh bien,je n'ai (fait une classe getComponent la mise en œuvre de MouseListener) et à l'aide de img1.addMouseListener(new ComponentListener() ). Le problème est maintenant.. j'ai ajouté un auditeur pour chaque composant, mais quand je clique sur n'importe quel composant (Image) l'événement n'est pas déclenché à tous
Désolé, je ne pense pas que j'ai été très clair, mais votre classe doit implémenter MouseListener, alors vous devez ajouter l'écouteur à chacun de vos composants qui sont en train d'être réglé autour de. @dragonml
OriginalL'auteur DankMemes
Tout d'abord, pour être technique, c'est méthodes pas de fonctions.
Il ya un couple de façons que vous pourriez faire cela. Vous pouvez aller de l'avant avec actionListener, mais alors vous aurez probablement besoin de boutons ou de quelque chose.
Ou vous pourriez utiliser MouseListener, et de détecter les clics sur une certaine région du panneau.
Pour la commutation de l'algorithme, peut-être un tableau de 2 images. Il y a une variable qui augmente de 1 à chaque clic. Lorsque la variable est de 2, il repasse à 0.
Sur le premier clic sur lequel vous avez cliqué image va dans le premier tableau, fente, car l'utilisateur a cliqué une fois.
Sur le deuxième clic, l'autre cliqué sur l'image passe à la deuxième matrice de logement, parce que 2 clics ont été détectés. Dans ce cas, votre exchangeComponents méthode serait aller à la fin de la méthode d'écouteur, avec les arguments imageArray[1], imageArray[2], .
Vous pouvez l'appliquer à ints ou que ce soit, il suffit d'enregistrer la valeur dans un tableau et utiliser l'incrémentation et la réinitialisation de la variable.
OriginalL'auteur Jimmt