Java 使用循环指定按钮
所以我一直在努力开发一个计算器来练习我的Swing应用程序。我试图分配每个整数按钮,以便在文本字段中打印它们各自的整数Java 使用循环指定按钮,java,swing,loops,jframe,Java,Swing,Loops,Jframe,所以我一直在努力开发一个计算器来练习我的Swing应用程序。我试图分配每个整数按钮,以便在文本字段中打印它们各自的整数 for (setBAction = 0; setBAction < 10; setBAction++) { numButtons[setBAction].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
for (setBAction = 0; setBAction < 10; setBAction++) {
numButtons[setBAction].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
textArea.append("" + setBAction);
}
});
}
for(setBAction=0;setBAction<10;setBAction++){
numButtons[setBAction].addActionListener(新建ActionListener()){
已执行的公共无效操作(操作事件e){
textArea.append(“+setBAction”);
}
});
}
当我在应用程序中按下任何按钮[]时,它总是打印“10”
我知道我可以单独映射每个按钮,但我觉得必须有一个简单循环的更有效的方法
如何修复此代码并使用循环有效地将每个按钮分配给各自的整数
编辑:谢谢“DontKnowMuchBut Getting Better”,使用一个简单的私有int,问题很容易解决 当前代码的ActionListeners在按下按钮时使用setBAction的当前值,即10,因为按钮按下都发生在创建循环完成之后。取而代之的是,考虑给每个ActualListNead一个私有字段来保存值 比如:
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);
}
});
}
然后通过镜像方法获取它们:
JComponent#getClientProperty(Object key)
JComponent#getClientProperty(Object key)