gpt4 book ai didi

java - 在另一个ArrayList中查找JButton源

转载 作者:行者123 更新时间:2023-12-02 10:47:03 26 4
gpt4 key购买 nike

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

public void addStuff() {
stuffList.add(new Stuff("Lemon Haze", 15.00));
stuffList.add(new Stuff("OG Kush", 16.00));
stuffList.add(new Stuff("Strawberry Cough", 18.00));
for (int i = 0; i < stuffList.size(); i++) {
stuffButton = new JButton();
stuffPanel.add(stuffButton);
stuffButton.setText(stuffList.get(i).getName());
stuffButton.addActionListener(this);
}

}

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() + "");
}
}

}

最佳答案

为您的 ActionListener 创建一个特定的类,并为其提供对您的 Stuff 的引用 - 这样您就可以为每个自动链接回的按钮创建一个特定的实例Stuff 的正确实例,无需尝试即时搜索:

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()));
}
}

请注意,您可以使用 lambda 使用更少的代码来完成此操作,但我认为这是解释逻辑的最清晰方法,无论哪种方式都是相同的。

顺便说一句,根据您发布的代码,它只获得最后一个按钮的原因是因为您正在与 stuffButton 进行比较,它与最后一个实例相比没有改变您的初始化循环已完成。

关于java - 在另一个ArrayList中查找JButton源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52469528/

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