在 gridLayout | 上读取和存储多个 JButton 的随机值Java SWING 寻找三胞胎

Reading and storing the random values of multiple JButtons on a gridLayout | Java SWING Finding a triplet

我正在尝试将 Finding a triplet 练习实现为 SWING GUI,其中有一个随机数网格,用户单击三个数字。如果前两个加起来等于第三个,它会增加正确尝试的计数器。试图了解如何将每个点击的数字存储在一个对象中,以便检查正确性。

我想知道我应该在哪里实现 actionListener,在 Square class 或 Board class,以及如何获取和存储每个点击按钮的值

就获取第一个值而言,这是我所了解的,但不知道如何在 actionListener 之外读取它,或者如何获取其他值。

private class ButtonListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getSource()==finish)
                JOptionPane.showMessageDialog(null, "You made " + wrongs + "correct tries.");
            else{
                Square sqr = (Square) e.getSource();
                int num = sqr.getNum();
            }
        }
    }

我想了解这样一个问题的处理原理。我觉得需要采取一种完全不同的方法。

解决方案不是唯一的,而是取决于解决方案。

如果你想用数字栏给出点击的顺序,我认为使用列表更好。

如果你只想给出总和的结果,最好使用 unique veriable。

一个示例解决方案,假设我们使用具有全局可见性的组件(虽然面向对象编程不推荐这些具有全局可见性的组件)

public class SingletonGame{

    private static final SingletonGame SINGLETON = new SingletonGame();

    public static SingletonGame getInstance(){
        return SINGLETON;
    }

    private int sum;
    //or
    private List<Integer> operations = new ArrayList<>();

    private SingletonGame(){}

    public int getSum(){
        return sum;
    }

    //or
    public List<Integer> getOperations(){
        return operations;
    }

    public void addSum(int num){
        this.sum += num;
    }

    //or
    public void addOp(int num){
        this.operations.add(num);
    }

    publi void getResult(){
        //inside this method you have your logic
        //for calculate result
    }

}

//Inside your action

private class ButtonListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getSource()==finish)
                JOptionPane.showMessageDialog(null, "You made " + wrongs + "correct tries.");
            else{
                Square sqr = (Square) e.getSource();
                int num = sqr.getNum();
                // you must do control when is case for call SingletonGame.getInstance().getResult();
                SingletonGame.getInstance().sum(num);

            }
        }
    }