Java 在另一个ArrayList中查找JButton源

Java 在另一个ArrayList中查找JButton源,java,arraylist,jbutton,Java,Arraylist,Jbutton,我试图构建一个GUI应用程序,让用户通过单击按钮来选择产品。我将产品保存在ArrayList中,然后使用此ArrayList和for循环创建适当数量的JButton。当用户单击按钮时,该产品的价格应显示在文本字段中。 我的问题是:如何找出点击了哪个按钮?如果我使用按钮数组(JButton button[]=newjbutton[3]),我会在循环中找到它: 如果(target.equals(按钮[i])。。。 但当我使用ArrayList of products创建按钮时,我不知道如何找到它。任

我试图构建一个GUI应用程序,让用户通过单击按钮来选择产品。我将产品保存在ArrayList中,然后使用此ArrayList和for循环创建适当数量的JButton。当用户单击按钮时,该产品的价格应显示在文本字段中。 我的问题是:如何找出点击了哪个按钮?如果我使用按钮数组(JButton button[]=newjbutton[3]),我会在循环中找到它: 如果(target.equals(按钮[i])。。。 但当我使用ArrayList of products创建按钮时,我不知道如何找到它。任何帮助都将不胜感激。这是我的代码(我尝试了许多方法,所以我只发布了我开始使用的方法-它只找到ArrayList中的最后一项)

public void addStuff(){
添加(新材料(“柠檬烟雾”,15.00));
添加(新材料(“OG Kush”,16.00));
添加(新东西(“草莓咳嗽”,18.00));
对于(int i=0;i
}

public void actionPerformed(ActionEvent e){
对象目标=e.getSource();
对于(int i=0;i

}

为您的
ActionListener
创建一个特定的类,并为它提供一个对
内容的引用
——这样您就可以为每个按钮创建一个特定的实例,自动链接回
内容的正确实例,而无需尝试动态搜索:

stuffButton.addActionListener(new StuffListener(stuffList.get(i));

...

private class StuffListener implements ActionListener {
    private final Stuff myStuff;
    public StuffListener(Stuff stuff) {
        this.myStuff = stuff;
    }

    public void actionPerformed(ActionEvent e) {
        subtotalTextF.setText(String.valueOf(myStuff.getPrice()));
    }
}
请注意,您可以使用lambdas使用更少的代码来完成这一点,但我认为这是解释逻辑的最清晰的方法,这两种方法都是一样的


另一方面,根据您发布的代码,它只获取最后一个按钮的原因是因为您正在与
stuffButton
进行比较,这与初始化循环完成后的最后一个实例相比没有变化。

Jesus man-10分钟,您已经为我找到了答案!非常感谢。真的很感激!如果这能解决问题,别忘了投票/接受答案:)
public void actionPerformed(ActionEvent e) {
Object target = e.getSource();
for (int i = 0; i < stuffList.size(); i++) {
    if (target == stuffButton) {
        subtotalTextF.setText(stuffList.get(i).getPrice() + "");
    }
}
stuffButton.addActionListener(new StuffListener(stuffList.get(i));

...

private class StuffListener implements ActionListener {
    private final Stuff myStuff;
    public StuffListener(Stuff stuff) {
        this.myStuff = stuff;
    }

    public void actionPerformed(ActionEvent e) {
        subtotalTextF.setText(String.valueOf(myStuff.getPrice()));
    }
}