2017-08-30 2 views
0

Ceci est une première étape de la fabrication de jeu de tictactoe en utilisant Java.Je veux imprimer le numéro 1 lorsque vous cliquez sur le bouton 1 mais cela ne fonctionne pas

Je veux imprimer le numéro 1 lorsque vous cliquez sur le bouton 1. Il y a 9 boutons mais cela ne fonctionne pas ce qui est faux J'ai imprimé la méthode e.getsource et le bouton B1 ils ne sont pas les mêmes. Pourquoi cela arrive-t-il?

package tictactoe; 

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class TicTacToe implements ActionListener{ 

JFrame frame1; 
JButton B1 = new JButton(); 
JButton B2 = new JButton(); 
JButton B3 = new JButton(); 
JButton B4 = new JButton(); 
JButton B5 = new JButton(); 
JButton B6 = new JButton(); 
JButton B7 = new JButton(); 
JButton B8 = new JButton(); 
JButton B9 = new JButton(); 

public void createGui(){ 
    frame1 = new JFrame(); 
    frame1.setTitle("TicTacToe"); 
    frame1.setSize(600, 600); 
    frame1.setLayout(new GridLayout(3,3,0,0)); 
    frame1.setLocationRelativeTo(null); 

    frame1.add(B1); 
    frame1.add(B2); 
    frame1.add(B3); 
    frame1.add(B4); 
    frame1.add(B5); 
    frame1.add(B6); 
    frame1.add(B7); 
    frame1.add(B8); 
    frame1.add(B9); 

    TicTacToe A1 = new TicTacToe(); 

    B1.addActionListener(A1); 
    B2.addActionListener(A1); 
    B3.addActionListener(A1); 
    B4.addActionListener(A1); 
    B5.addActionListener(A1); 
    B6.addActionListener(A1); 
    B7.addActionListener(A1); 
    B8.addActionListener(A1); 
    B9.addActionListener(A1); 

    // frame1.pack(); 
    frame1.setVisible(true); 
    frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

public void actionPerformed(ActionEvent e) { 
    if(e.getSource()==B1){ 
     B1.setText("1"); 
    } 
} 

public static void main(String[] args) { 
    TicTacToe T1 = new TicTacToe(); 
    T1.createGui(); 
} 
} 
+1

Prenez en compte la converntion java. les noms de variables doivent commencer par des caractères minuscules – Jens

Répondre

2

La raison pour vous programme ne fonctionne pas est que vous créez une nouvelle TicTacToe que vous utilisez comme paramètre à la JButton.addActionListener(). Essayez plutôt d'utiliser this et supprimez A1.

B2.addActionListener(this); 

Ensuite, cela fonctionnera.

Cependant, j'ai une suggestion à une approche différente de l'utilisation JButton.addActionListener(). Au lieu de cela, vous pouvez utiliser le constructeur JButton qui prend comme paramètre un Action. Implémentez votre propre Action qui s'étend AbstractAction, puis définissez le texte dans la méthode actionPerformed() que vous devez implémenter. Vous pouvez laisser le Action prendre un paramètre avec le texte que vous voulez écrire lorsqu'il est pressé.

private class PressedAction extends AbstractAction { 
    private final String text; 

    public PressedAction(String text) { 
     this.text = text; 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     ((JButton) e.getSource()).setText(text); 
    } 
}