Auf Thema antworten

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]



Oben