按下按钮时如何从另一个类运行方法?

时间:2019-05-25 00:46:23

标签: java swing actionlistener

我正在为Java项目创建一个TicTacToe程序。我使用带有3x3面板的swing作为GUI,并将按钮集成到每个框中供用户单击。问题是,我不知道如何运行WinCondition方法(意味着用户连续获得3个)。我无法将其调用为button类中的actionPerformed方法,并且我不知道在其他地方可以调用它。

我有两个类,一个是按钮类,另一个是为用户创建面板的实际游戏。

我尝试过考虑在其他地方可以实现它,但是我不能这样做,因为除了actionPerformed方法之外,当按下按钮时,我不知道另一种执行代码的方法。

public class TicTacGame extends JFrame{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    JPanel p = new JPanel();
    XOButton[] buttons = new XOButton[9];

    public TicTacGame() {
        super("TicTacToe");
        setSize(400,400);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        p.setLayout(new GridLayout(3,3));
        for(int i = 0; i < 9; i++) {
            buttons[i] = new XOButton();
            p.add(buttons[i]);
        }
        add(p);

        setVisible(true);

        }

    public int winCondition() {

        //I have left out the win condition method so this box doesn't get unnecessarily long
    }


    public static void main(String[] args) {
        TicTacGame ttg = new TicTacGame();

    }
}
public class XOButton extends JButton implements ActionListener{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    ImageIcon X;
    ImageIcon O;
    //0 is nothing, 1 is X, 2 is O
    int value = 0;
    public static int turn = 1;


    public XOButton() {
        X = new ImageIcon(this.getClass().getResource("X.png"));
        O = new ImageIcon(this.getClass().getResource("O.png"));
        addActionListener(this);
    }

    public int getValue() {
        return this.value;
    }

    public void actionPerformed(ActionEvent e) {
        if(turn >= 5) {
            int win = ttg.winCondition();
        }

        if(turn % 2 == 0) {
            value += 2;
            turn++;
        }
        else {
            value++;
            turn++;
        }
        value %= 3;
        switch(value) {
            case 0:
                setIcon(null);
                break;
            case 1:
                setIcon(X);
                removeActionListener(this);
                break;
            case 2:
                setIcon(O);
                removeActionListener(this);
                break;
        }
    }

}

我希望每当单击一个按钮时,都会执行winCondition()方法来检查用户是否赢了。

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到其中之一

不要 创建静态的win方法,以便您可以从任何其他类进行访问。有关更多信息,请阅读下面的评论

1)您可以将TicTacGame类的引用传递到构造函数中的XOButton类中。以便您可以访问TicTacGame类中的任何其他函数

2)您可以使用界面...等