【问题标题】:Assigning Buttons Using Loops使用循环分配按钮
【发布时间】:2018-09-12 01:21:25
【问题描述】:

所以我一直在尝试开发一个计算器来练习我的 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,问题就轻松解决了!

【问题讨论】:

    标签: java swing loops jframe


    【解决方案1】:

    您当前代码的 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 字符串并从中提取数字。此外,包括 JButtons 在内的所有 Swing 组件都有一个 clientProperty Map,可以在需要的时间和地点保存值,您可以通过以下方式将值放入:

    JComponent#putClientProperty(Object key, Object value)
    

    然后通过镜像方法获取:

    JComponent#getClientProperty(Object key)
    

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      相关资源
      最近更新 更多