无法在数组类型JButton [] []上调用checkState()?

时间:2016-10-10 11:15:55

标签: java swing jbutton actionlistener

我编写了一个方法checkState(),它接受参数JButton [] [],这是一个2-D按钮数组,并返回按钮矩阵的状态。但是,当我尝试在ActionPerformed的匿名内部类中调用它时,它显示此错误。你能帮我解决错误背后的原因吗?

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


public class PlayGameUU 
{
int moves=0;
String s;
public PlayGameUU(JButton[][] box)
{
    for (int i=0;i<3;i++)
    {
        for (int j=0;j<3;j++)
        {
            box[i][j].addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    while (checkState(box)==0)
                    {

                        if (((JButton)e.getSource()).getText().equals(""))
                        {           
                        if (moves%2==0)
                            {
                            ((JButton)e.getSource()).setText("0");
                            moves++;
                            }
                        else
                            {
                            ((JButton)e.getSource()).setText("X");
                            moves++;
                            }
                        }
                    }
                    if (checkState(box)==1)
                        s="0 wins";


                    else if (checkState(box)==2)
                        s="X wins";
                    else if (checkState(box)==3)
                        s="Tie";
                }});
        }
        }
}



final public int checkState(JButton[][] box)        
//Returns 1 for zero win, 2 for cross win and 3 for draw, 0 otherwise
{
    int flagzerowin=0;
    int flagcrosswin=0;

    for (int row=0;row<3;row++)
    {
    if (box[row][0].getText().equals("X") && box[row]    [1].getText().equals("X") && box[row][2].getText().equals("X"))
        {
        flagcrosswin=1;
        break;
        }
    else if (box[row][0].getText().equals("0") &&box[row][1].getText().equals("0") &&box[row][2].getText().equals("0"))
        {
        flagzerowin=1;
        break;
        }
    }

    for (int col=0;col<3;col++)
    {
    if (box[0][col].getText().equals("X") &&box[1][col].getText().equals("X") &&box[2][col].getText().equals("X"))
        {
        flagcrosswin=1;
        break;
        }   
    else if (box[0][col].getText().equals("0") &&box[1][col].getText().equals("0") &&box[2][col].getText().equals("0"))
        {
        flagzerowin=1;
        break;
        }
    }

    if (box[0][0].getText().equals("X") && box[1][1].getText().equals("X") && box[2][2].getText().equals("X"))
        flagcrosswin=1;

    if (box[0][2].getText().equals("X") && box[1][1].getText().equals("X") && box[2][0].getText().equals("X"))
        flagcrosswin=1;

    if (box[0][0].getText().equals("0") && box[1][1].getText().equals("0") && box[2][2].getText().equals("0"))
        flagzerowin=1;

    if (box[0][2].getText().equals("0") && box[1][1].getText().equals("0") && box[2][0].getText().equals("0"))
        flagzerowin=1;

    if (flagzerowin==1)
        return (1);
    else if (flagcrosswin==1)
        return(2);

    int flagfull=1;
    for (int i=0;i<3;i++)
    {
        for (int j=0;j<3;j++)
        {
            if (box[i][j].getText().equals(""))
                flagfull=0;
        }
    }

    if ((flagzerowin==0)&&(flagcrosswin==0)&&(flagfull==1))
        return(3);          //Draw

    else
        return (0);
    }

    }

以下是调用PlayGameUU构造函数的代码:

    public JButton box[][]=new JButton[3][3];
    public int mode;

    if (mode==1)
    {
        new PlayGameUU(box);
    }

0 个答案:

没有答案