使用循环分配按钮

时间:2018-04-02 19:48:40

标签: java swing loops jframe

所以我一直在努力开发一个计算器来练习我的Swing应用程序。我正在尝试分配每个整数按钮以在文本字段中打印它们各自的整数。

    for (setBAction = 0; setBAction < 10; setBAction++) {

        numButtons[setBAction].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                textArea.append("" + setBAction);
            }

        });
    }

当我在我的应用程序中按任何numButtons []时,它总是打印“10”。

我知道我可以单独映射每个按钮,但我觉得必须有一个更简单的循环方法。

如何修复此代码并使用循环有效地将每个按钮分配到各自的整数?

编辑:谢谢“DontKnowMuchBut Getting Better”,使用简单的私有int,问题很容易解决!

1 个答案:

答案 0 :(得分:3)

当按下按钮时,您当前代码的ActionListeners使用setBAction的当前值,即10,因为按钮按下全部在创建循环完成后发生。相反,请考虑为每个ActionListener提供一个私有字段来保存值

类似的东西:

    for (setBAction = 0; setBAction < numButtons.length; setBAction++) {

        numButtons[setBAction].addActionListener(new ActionListener() {
            private int value = setBAction;  // set on creation

            public void actionPerformed(ActionEvent e) {
                textArea.append("" + value);
            }

        });
    }

其他选项包括通过e.getActionCommand()获取按钮的actionCommand String并从中提取数字。此外,包括JButton在内的所有Swing组件都有一个clientProperty Map,可以在需要的时间和地点保存值,并且可以将值放入via:

JComponent#putClientProperty(Object key, Object value)

然后让他们通过镜像方法:

JComponent#getClientProperty(Object key)