所以我一直在努力开发一个计算器来练习我的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,问题很容易解决!答案 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)