【发布时间】:2018-12-07 15:19:25
【问题描述】:
我正在使用 JFrame 和 JButtons 制作一个简单的计算器。在我用自己的动作监听器制作每个按钮之前,从 0 到 9,现在我已经意识到这是非常低效的,我应该使用循环来制作每个按钮并分配 ActionListeners。因此,在每个 ActionListener 中唯一需要做的就是将按钮的任何数字添加到 JTextField,称为 nums。这是我现在所拥有的。
for(int i = 0; i <=9; i++) {
count = i;
btns.get(i).addActionListener(new ActionListener(){ //makes action listeners for each button
public void actionPerformed(ActionEvent e){
nums.setText(nums.getText()+ count);//IMPORTANT CODE
}
});
}
如您所见,我使用了一个名为count 的变量。 count 在使用重要代码之前的每次迭代中设置为 i。我必须这样做,因为 AL 是它自己的类并且无法访问 i。但是 count 是公共的和静态的,所以 AL 可以使用 count。
我的问题是所有按钮都打印 9。这在逻辑上是有道理的,因为发生的事情是每个按钮中的 AL 使用 count 变量,当循环完成时,count 将为 9,这意味着每个 AL 本质上将包含nums.setText(nums.getText()+ 9);。相反,我需要按钮 1 为 nums.setText(nums.getText()+ 1); 2 为 2,ETC。
我试过调用每个按钮的文本,但是因为需要在ArrayList的get方法中使用索引,所以需要一个变量,如果使用count也会出现同样的问题;在 for 循环终止后,计数为 9,因此所有按钮都打印 9 按钮的文本。
感谢任何和所有帮助,在此先感谢, -最大
附:以防你不明白我为什么要获取文本然后添加计数,这是因为为了输入数字 12。你需要输入 1,然后将 2 连接到 et 12。getText 得到1,加上 count 将 2 连接成 12。
【问题讨论】:
-
为什么不将 count not 设为类的字段,而设为本地 final int 变量?例如,
final int finalCount = i;
标签: java loops swing jbutton actionlistener