I have been working on TicTacToe for some time now. I just now got it to work but it's not working properly. When somebody gets three in a row a label is suppose to show that a player has won but it does'nt. So I cant figure out why it's having trouble deciding if somebody has won or not. The code in which I think there is a problem is in Bold. Here is the code:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class ButtonArray extends JFrame implements ActionListener {
  JButton btn[][];
  String player;
  JLabel lbl;

  public ButtonArray() {
	JPanel jp = new JPanel();
	Container pane = getContentPane();
	
	setSize(155,155);
	setTitle("Tic Tac Toe");
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
	btn = new JButton[3][3];
	player = "X";
	
	for (int x=0; x<3; x++) {
		for (int y=0; y<3; y++) {
			btn[x][y] = new JButton(" ");
			btn[x][y].addActionListener(this);
			jp.add(btn[x][y]);
		}
	}
	
	JPanel jp2 = new JPanel();
	lbl = new JLabel("Status: player X to go next");
	jp2.add(lbl);
	
	
	pane.setLayout(new BorderLayout());
	pane.add(jp, BorderLayout.CENTER);
	pane.add(jp2,BorderLayout.SOUTH);
	setContentPane(pane);
	setResizable(false);
	setVisible(true);


	

   }


   public void actionPerformed(ActionEvent e) {

	
	for (int x=0; x<3; x++) {
	    for (int y=0; y<3; y++) {
		if (e.getSource() == btn[x][y]) {
			processEvent(x,y);


		}
		
	    }
	}
	
   }

[B] private boolean hasWon(int x, int y) {
	boolean won;
	won = true;
	
	for (int num=0; num<3; num++) {
		won = false;
		if (btn[x][num].getText().equals(player)) {
			won = true;
		
		}
		
	}
	if (!won) {
		won = false;
		for (int col=3; col<3; col++) {
			if (btn[col][y].getText().equals(player)) {
				won = true;
			
			}
		}
	}
	
	if (!won) {
		won = false;
		for (int num=0; num<3; num++) {
			if (btn[num][num].getText().equals(player)) {
				won = true;
			
			}
		}
	}
	
	if (!won) {
		won = false;
		for (int num=0; num<3; num++) {
			if (btn[2-num][num].getText().equals(player)) {
				won = true;
				
			}
		}
	}
	return won;
   }[/B]

   
   public void processEvent(int x, int y) {
	
     if (btn[x][y].getText().equals("X") || btn[x][y].getText().equals("O")) {
		System.out.println("Cell is already taken");
     }
	
	 else {	
		btn[x][y].setText(player);

	}
	
	[B] if (hasWon(x,y) == true) {
			lbl.setText("Game Won");
	}[/B]
	
		

		      if (player.equals("X")) {
		           player = "O";
		      }
		      else {
			       player = "X";
		      }

		
			         lbl.setText("Status: player " + player + " to go next");
      	
   }	
 
   public static void main(String[] args) {
		ButtonArray ba = new ButtonArray();

   }
}
This article has been dead for over six months. Start a new discussion instead.