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

标签 java arraylist jbutton

我正在尝试构建一个 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/

相关文章:

java - 如何检查数据库中是否存在表或列?

java - ManyToMany映射关系表为空(Hibernate新手)

java - 创建一个空数组列表,然后将索引设置为一个对象

java - 为什么我的 boolean 变量搞砸了?

java - an==a 是否可以为 Java 中的某个变量 a 计算 false?

java - 无法通过 IntelliJ Idea 在 tomcat 上运行服务

java - 一个接一个地从 Arraylist 中打印出不同的项目

java - Java的ArrayList的C++版本是什么

java - 如何使用 java 中的 jButton 打印 TextArea 中的文本?

java - 在 BoxLayout 中调整 JButton 的大小