Создайте определенный класс для вашего 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()));
}
}
Обратите внимание, что вы можете выполнить это с немного меньшим количеством кода, используя лямбды, но решил, что это самый простой способ объяснить логику, которая в любом случае одинакова.
Что касается примечания, основанного на опубликованном вами коде, то причина, по которой он получает только последнюю кнопку, состоит в том, что вы сравниваете с stuffButton
, который не изменяется с последнего экземпляра после цикла инициализации.сделано.