Je travaille actuellement sur une classe Java qui produit une simple disposition JFrame/JButton de Tic-Tac-Toe. En implémentant ActionListener, j'ai voulu que le JButton sélectionné positionne son titre sur "X" ou "O" (basé sur une déclaration booléenne indiquant si X est ou non choisi un JButton) et devient désactivé (donc il ne peut pas être joué sur en haut dans les tours suivants). L'application en cours que j'ai créée le fait, mais elle ne modifie parfois pas le texte de JButton ou ne le désactive pas jusqu'à ce que je clique sur un autre bouton. Il ne semble y avoir aucune sorte d'ordre cohérent auquel cela se produit lorsque je clique sur l'un des boutons JButtons. J'ai passé des heures à essayer de résoudre ce problème sans succès. Y at-il un problème avec comment j'ai codé ma méthode actionPerformed ou comment je l'ai ajouté à mon JButtons?ActionListener: Désactiver les boutons
Voici le code à ma classe:
import javax.swing.*;
import java.awt.event.*;
import javax.swing.*;
public class TTT extends JFrame implements ActionListener{
// private fields
private JButton[] buttonArray;
private JLabel prompt;
private boolean turnX;
private String letter;
public TTT() {
// Instantiates JFrame window and adds lines to board
super.setSize(235, 280);
super.setTitle("Tic-Tac-Toe");
// Instantiates JButton array
buttonArray = new JButton[9];
// Loop that creates the JButton squares
for(int y = 30; y <= 140; y += 55) {
for(int x = 30; x <= 140; x += 55) {
for(int index = 0; index < buttonArray.length; index++) {
buttonArray[index] = new JButton();
buttonArray[index].setSize(50, 50);
buttonArray[index].setLocation(x, y);
buttonArray[index].addActionListener(this);
super.add(buttonArray[index]);
}
}
}
prompt = new javax.swing.JLabel("X's TURN");
prompt.setVerticalAlignment(JLabel.BOTTOM);
super.add(prompt);
turnX = true;
super.setVisible(true);
}
public void actionPerformed(java.awt.event.ActionEvent a) {
// Calculate whose turn it is
if(turnX){
letter = "X";
prompt.setText("O's TURN");
turnX = false;
} else if(!turnX){
letter = "O";
prompt.setText("X's TURN");
turnX = true;
}
JButton pressedButton = (JButton)a.getSource();
pressedButton.setText(letter);
pressedButton.setEnabled(false);
super.repaint();
}
public static void main(String[] args) {
new TTT();
}
}
Merci beaucoup! J'ai lâché quand j'ai lu que j'ajoutais 82 boutons au JFrame ... – Saffioti