Référence cliqué JButton à l'intérieur ActionListener
Je suis en train d'écrire un Tic Tac Toe programme à l'aide de swing, mais il me semble avoir quelques difficultés. Dans mon anonyme intérieur des classes j'ai essayer de configurer le actionListener pour chacun de mes boutons, mais je vais avoir du mal à trouver le type ou la variable qui va me permettre de référence les boutons et les mettre à X ou Y. j'ai essayé e.getSource().setText() dans mon anonyme classes, mais qui reviennent avec des erreurs. Toutes les pensées?
Merci!
Alex
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TicTacToe {
public JFrame frame;
public JLabel label;
public JPanel panel;
public static int counter;
public void go()
{
frame = new JFrame("TicTacToe");
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new JPanel();
panel.setLayout(new GridLayout(3,3,10,10));
frame.add(BorderLayout.CENTER, panel);
label= new JLabel("TIC TAC TOE");
frame.add(BorderLayout.NORTH, label);
;
JButton button1 = new JButton("Button 1");
JButton button2 = new JButton("Button 1");
JButton button3 = new JButton("Button 1");
JButton button4 = new JButton("Button 1");
JButton button5 = new JButton("Button 1");
JButton button6 = new JButton("Button 1");
JButton button7 = new JButton("Button 1");
JButton button8 = new JButton("Button 1");
JButton button9 = new JButton("Button 1");
button1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
}
});
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
}
});
button3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
}
});
button4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
}
});
button5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
}
});
button6.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
}
});
button7.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
}
});
button8.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
}
});
button9.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
}
});
panel.add(button1);
panel.add(button2);
panel.add(button3);
panel.add(button4);
panel.add(button5);
panel.add(button6);
panel.add(button7);
panel.add(button8);
panel.add(button9);
frame.setVisible(true);
panel.setVisible(true);
}
public static void main(String[] args)
{
TicTacToe gui = new TicTacToe();
gui.go();
}
}
OriginalL'auteur Amloelxer | 2013-08-05
Vous devez vous connecter pour publier un commentaire.
Rappelez-vous,
ActionListener
peut être utilisé sur un certain nombre de différents types de composants, de sorte que la source de référence est généralisée. Vous avez besoin de jeter en arrière pour la valeur attendueAlors que je sais que votre
ActionListener
, comme il se peut très bien la garantie que le type de la source de laObject
sera unJButton
, je n'aime aveuglément casting des objets, mais c'est moiUne autre question. Quelle serait la meilleure façon de déterminer un gagnant de cette façon? Disons que si je fais un compteur et d'avoir ((JButton) source).setText("O"); ou ((JButton) source).setText("X");
En fait, le meilleur moyen serait d'établir une sorte de modèle. Cela vous permettra de vérifier l'état de jouer et de déterminer pour quelles cellules sont sélectionnées et par qui. Chaque fois qu'un joueur sélectionne un bouton, je voudrais mettre à jour le modèle. Le cadre de ce processus serait pour le modèle de vérifier pour un gagnant, et le feu à un événement approprié
OriginalL'auteur MadProgrammer
Si vous recevez des erreurs, alors vous devez les poster, mais je suppose que c'est parce que vous n'êtes pas en affirmant que l'objet source est en fait un bouton. Il y a deux solutions logiques à ce que vous faites.
Première est que depuis que vous êtes seulement l'ajout d'une action de l'auditeur à chaque bouton, vous pouvez supposer qu'il est l'objet que l'événement d'action se réfère. Il suffit de noter que le bouton doit être une variable d'instance ou déclarée final:
Deuxième, qui permettrait de corriger la cause de votre erreur, en affirmant que l'ActionEvent objet source est en fait un bouton. Ceci est fait en vérifiant que la source est une instance de JButton:
JButton
devront soit être une variable d'instance oufinal
😉Bon point, merci.
OriginalL'auteur Kevin Sheehan
Je suis allé à travers et nettoyé vos code un peu. Je ne suis pas tout à fait sûr pourquoi votre code a des erreurs, mais je n'ai pas tout. Je suggère, puisque vous avez le bon code, pour les réutiliser comme je l'ai fait dans un tableau. J'ai également ajouté un
boolean
pour basculer entre les joueurs de chaque clic sur le bouton.Enfin, je suggère la configuration de la JFrame dans le constructeur ou dans une méthode appelée par le constructeur (plus complexe interfaces utilisateur peut avoir beaucoup de code, et la rupture est une bonne habitude pour la maintenabilité de votre code) comme je l'ai montré ci-dessous.
OriginalL'auteur Pandacoder