In die Klasse Produkt würde ich keinen GUI-Code reinmachen.
revidiere: Zähler als static ist in diesem Fall doch nicht passend.
Code sagt manchmal mehr als 1000 Worte deshalb mal schnell zusammengebastelt:
[code=Java]import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Test
{
public static void main(String[] args)
{
final List<Produkt> liste = new ArrayList<Produkt>();
liste.add(new Produkt(1, "A"));
liste.add(new Produkt(2, "B"));
liste.add(new Produkt(3, "C"));
//usw...
JFrame frame = new JFrame();
frame.setSize(500,500);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(liste.size()+1,2));
panel.setVisible(true);
for(Produkt p:liste)
{
panel.add(new GUIElement(p));
}
JButton ges = new JButton("Rechnung");
ges.setSize(50,50);
ges.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0)
{
double summe = 0;
for(Produkt p: liste)
{
System.out.println(p.getName()+" Anz: "+p.getAnzahl()+" Summe:"+(p.getAnzahl()*p.getPreis()));
summe+=(p.getAnzahl()*p.getPreis());
}
System.out.println("Gesamt = "+summe);
}
});
panel.add(ges);
frame.add(panel);
frame.setVisible(true);
}
}
class Produkt
{
private int anzahl = 0;
private double preis;
private String name;
public Produkt(int preis, String name)
{
super();
this.preis = preis;
this.name = name;
}
public void setAnzahl(int anzahl)
{
this.anzahl = anzahl;
}
public int getAnzahl()
{
return anzahl;
}
public double getPreis()
{
return preis;
}
public String getName()
{
return name;
}
}
class GUIElement extends JPanel
{
private JTextField textField;
private JLabel lblNewLabel;
private Produkt produkt;
public GUIElement(Produkt produkt)
{
this.produkt = produkt;
lblNewLabel = new JLabel(this.produkt.getName());
add(lblNewLabel);
textField = new JTextField(this.produkt.getAnzahl());
textField.setColumns(10);
add(textField);
textField.setText(String.valueOf(this.produkt.getAnzahl()));
JButton btnNewButton = new JButton("kaufen!");
btnNewButton.setSize(50,50);
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0)
{
GUIElement.this.produkt.setAnzahl(GUIElement.this.produkt.getAnzahl()+1);
GUIElement.this.textField.setText(String.valueOf(GUIElement.this.produkt.getAnzahl()));
}
});
add(btnNewButton);
this.setSize(100,50);
this.setVisible(true);
}
}[/code]