gpt4 book ai didi

java - 对循环中动态创建的每个按钮都有不同的操作

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:57:56 24 4
gpt4 key购买 nike

经常使用这个网站,但第一次发帖。我的程序根据文件中的记录数创建了许多按钮。例如。 5 条记录,5 个按钮。

正在创建按钮,但我遇到了 Action 监听器的问题。

如果在循环中添加 Action 监听器,每个按钮都会做同样的事情;但如果我在循环外添加 Action 监听器,它只会将 Action 监听器添加到最后一个按钮。

有什么想法吗?

这是我的代码(我刚刚添加了 for 循环以节省空间):

int j=0;
for(int i=0; i<namesA.size(); i++)
{
b = new JButton(""+namesA.get(i)+"");
conPanel.add(b);
conFrame.add(conPanel);

b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae2){

System.out.println(namesA.get(j));

}
}});
j++;
}

非常感谢

最佳答案

当您为正在创建的每个按钮创建一个 Action 监听器时,您可以这样做:

final int buttonIndex = i;
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae2) {
System.out.println("Button pressed is: " + buttonIndex);
}
}

要访问匿名类方法中的变量,必须将其标记为final。这就是您所拥有的 final int buttonIndex = i; 语句。

您可以在按钮上使用setActionCommand 方法为其定义一个操作命令,您可以从actionCommand 中检索该命令。 ActionEvent 类的属性。通过这样做,您可以为所有按钮使用相同的监听器。您可以将该操作命令设置为我在示例中定义的 buttonIndex 变量。通过这样做,您可以在应用程序中创建更少的匿名类,这总是好的(更少的对象消耗更少的内存)。

关于java - 对循环中动态创建的每个按钮都有不同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2430008/

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