action de l'auditeur dans une autre classe java
il est possible d'avoir deux classes, et en un quelque chose comme
arrayButtons[i][j].addActionListener(actionListner);
et dans un autre
ActionListener actionListner = new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (int j = 0; j < arrayButtons.length; j++) {
for (int i = 0; i < arrayButtons[j].length; i++) {
if (arrayButtons[j][i] == e.getSource()) {
if ((gameNumber == 2) && (playHand.getNumberOfCards() == 0)) {
if (player[j].getCard(i).getSuit() == Suit.HEARTS.toString() && player[j].hasSuitBesideHearts())
//second game
messageOnTable("xxx");
else{
arrayButtons[j][i].setVisible(false);
test[j].setIcon(player[j].getCard(i).getImage());
pnCardNumber[j].setText(Integer.toString(player[j].getCard(i).getNumber()));
pnCardName[j].setText(player[j].getCard(i).toString());
pnCardSuit[j].setText(player[j].getCard(i).getSuit());
playHand.addCard(player[j].getCard(i), j);
player[j].removeCard(i);
}
}
}
//et plus
la raison de cela est parce que j'ai besoin de séparer le bouton (swing) à l'action de l'auditeur
comment je peux faire ?
grâce
Oui, vous pouvez utiliser ActionListeners à partir d'autres classes ou d'avoir une classe implémente l'interface ActionListener, mais le diable est dans les détails. Nous pourrons plus facilement vous conseiller sur la façon de le faire que si nous connaître plus de détails au sujet de votre programme.
OriginalL'auteur user455318 | 2011-02-13
Vous devez vous connecter pour publier un commentaire.
Non seulement il est possible de séparer ces deux-là, il est également recommandé (voir le modèle MVC - c'est très bien l'idée de la séparation des contrôles d'écran comme des boutons, et la logique de votre programme)
La manière la plus simple qui me vient à l'esprit est de faire écrire un nom de classe qui implémente
ActionListener
interface, quelque chose comme ceci:Puis l'ajouter à vos boutons:
Qui est difficile. Voir ma réponse mis à jour pour une solution possible. L'autre chose que vous pourriez faire est d'avoir des méthodes de lecture pour tous les composants sur le
JFrame
et passer ensuite seulementjFrame
instance à l'auditeur.encore une fois, plus d'informations, vous pouvez fournir par l'édition d'origine de votre post ci-dessus, le plus instructif des réponses que nous pouvons fournir.
c'est beaucoup plus compliqué, car impliquent de nombreux tableaux et des boucles de boutons (52 - jeu de cartes)
Pas vraiment. Il suffit de passer ensemble de tableaux et de boucle dans l'écouteur. Un tableau peut avoir de nombreux éléments, mais c'est toujours une référence unique.
OriginalL'auteur Goran Jovic
De répondre: "mon problème, c'est que l'action de l'auditeur ont de nombreuses variables de swing comme des boutons par exemple,si, quand j'ai changer pour une autre classe, j'ai des problèmes avec ça"
Votre action de classe écouteur pourrait avoir un constructeur qui prend un paramètre de type de la classe de la vue:
Alors à votre avis:
OriginalL'auteur Matt Crinklaw-Vogt
vous pouvez le faire facilement à l'aide de classes imbriquées,
mais je pense que le meilleur moyen est de passer le parent de l'objet en tant que paramètre à la construction de l'objet et de l'utiliser comme une action de gestionnaire;
Ce n'est pas exactement découplés, mais c'est une solution! YOINK!
Cette solution est très désordonné lorsque vous traitez avec des complexes GUI et tout aussi complexe gestionnaires. Fonctionne très bien pour la quantité de code que vous fournissez, mais il n'est certainement pas un maintenable solution lorsque les fichiers de développer de grandes. -1
en fait de ma longue expérience avec Java, langages comme java ne l'approuve pas c'est l'efficacité de l'INTERFACE utilisateur de toute façon :P, et je pense que c'était la raison langages de script comme "javascript" et "Actionscript" est utilisé pour l'INTERFACE utilisateur, de toute façon clair et simple solution est toujours de gagner sur les normes, s'il vous plaît regarder la vidéo quand Facebook introduire "Réagir Cadre", et vous savez comment MVC a été le suce pour une INTERFACE utilisateur complexe que je suis sûr que vous ne jamais faire face dans votre carrière
OriginalL'auteur Fareed Alnamrouti
Oui, il peut être fait. C'est très simple; dans une classe que vous avez des boutons, dans l'autre classe, vous avez juste besoin de mettre en œuvre un ActionListener et juste faire de votre //cmd
pour séparer que la fonction du bouton. Pour ce faire, vous devez utiliser l'e.getActionCommand().equals(buttonActionCommand).
Exemple de code:
Ajouter que le port d'écoute sur votre bouton juste à faire:
OriginalL'auteur Alejandro
C'est un peu hors sujet, mais vous devriez certainement pas utiliser le
==
opérateur de comparerString
s comme vous avez l'air d'être en train de faire sur cette ligne:C'est parce que
String
s sont des pointeurs, non sur des valeurs réelles, et vous pouvez obtenir un comportement inattendu à l'aide de la==
de l'opérateur. Utiliser lesomeString.equals(otherString)
méthode à la place. Et aussiest beaucoup mieux que l'inverse
parce que dans le premier exemple, vous éviter d'avoir un NullPointerException si
stringVariable
est null. Elle retourne false.OriginalL'auteur Oskar Lund