gpt4 book ai didi

java - JButton ActionListeners 每个循环中的不同变量

转载 作者:行者123 更新时间:2023-11-30 05:52:25 25 4
gpt4 key购买 nike

我正在使用 JFrame 和 JButtons 制作一个简单的计算器。在我制作每个按钮(从 0 到 9)都有自己的操作监听器之前,现在我意识到这是非常低效的,我应该使用循环来制作每个按钮并分配 ActionListener。因此,每个 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

}
});
}

正如你所看到的,我使用了一个名称非常糟糕的变量,名为 countcount设置为i在使用重要代码之前的每次迭代中。我必须这样做,因为 AL 是它自己的类,无法访问 i。然而 count 是公共(public)且静态的,因此 AL 可以使用 count。

我的问题是所有按钮都打印 9。这在逻辑上是有道理的,因为发生的情况是每个按钮中的 AL 使用计数变量,当循环完成时,计数将为 9,这意味着每个 AL 本质上将包含nums.setText(nums.getText()+ 9); 。相反,我需要按钮 1 为 nums.setText(nums.getText()+ 1); 2 变为 2,等等。

我尝试过调用每个按钮的文本,但是,因为ArrayList get方法中需要使用索引,所以需要一个变量,如果使用count,也会出现同样的问题; for 循环终止后,计数为 9,因此所有按钮都会打印 9 按钮的文本。

感谢任何和所有帮助,提前致谢,-最大

附注以防万一您不明白为什么我要获取文本然后添加计数,这是因为为了输入数字 12。您需要输入 1,然后将 2 连接到 1 到 et 12。getText 得到1,加上 count 将 2 连接起来得到 12。

最佳答案

一般来说,您会希望避免使用静态字段,因为这样您就失去了面向对象编程的所有好处。有一些特定的地方可以使用静态字段,但这不是其中之一。在您的情况下,您不能直接使用循环的索引,i,因为它不是最终局部变量,并且非最终局部变量不能在匿名内部类中使用。因此存在一个简单的解决方案:

将 count 设置为最终局部变量,您应该能够在匿名内部类中使用它:

for(int i = 0; i <= 9; i++) {
final int finalCount = i;
btns.get(i).addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){

nums.setText(nums.getText() + finalCount);

}
});
}

关于java - JButton ActionListeners 每个循环中的不同变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53672337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com