Oberfläche mit Java-Swing


Downloads
BlueJ-Projekt: Verkaufsautomat_V2_bluej.zip
IntelliJ-Projekt: Verkaufsautomat_V2_intellij.zip
Quelltext der Oberfläche
import java.awt.*; import javax.swing.*; import java.util.*; import java.awt.event.*; public class Oberflaeche extends JFrame { // Das ist der Fensterrahmen des Programms private Steuerung dieSteuerung = new Steuerung(); // Die Steuerung ist eine extra Klasse public Oberflaeche() { getContentPane().add(new MyContainer(dieSteuerung)); // Den Container in den Fensterrahmen eingebaut setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); // Beenden wenn Rahmen geschlossen } public static void main(String[] args) { // Main Methode zum starten der Applikation Oberflaeche dieOberflaeche = new Oberflaeche(); // Das Fenster wird erzeugt dieOberflaeche.setSize(500,500); // Die Groesse wird festgelegt dieOberflaeche.setTitle("Verkaufsautomat 2 (c) MezMedia '2021"); dieOberflaeche.setVisible(true); } } class MyContainer extends Container { // Ein Container nimmt die einzelnen Panele auf public MyContainer(Steuerung steu){ setLayout(new BorderLayout(10,10)); NordPanel nord = new NordPanel(steu); SuedPanel sued = new SuedPanel(steu); add(nord, BorderLayout.NORTH ); add(new OstPanel(steu,nord,sued), BorderLayout.EAST ); add(new MittePanel(steu), BorderLayout.CENTER ); add(sued, BorderLayout.SOUTH ); } } class NordPanel extends JPanel{ private JTextField dasGeldFeld = new JTextField(5); private JButton derEinwurfButton = new JButton("Einwerfen"); private JLabel dasKassenLabel = new JLabel("0 Cent"); private Steuerung dieSteuerung; // wir brauchen einen dauerhaften Draht zur Steuerung public NordPanel(Steuerung steu){ setBackground(Color.yellow); setLayout(new FlowLayout()); add(new JLabel("Geldeinwurf ")); add(dasGeldFeld); add(derEinwurfButton); add(new JLabel("Kasse: ")); add(dasKassenLabel); dieSteuerung = steu; derEinwurfButton.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(MouseEvent e) { int g = Integer.parseInt(dasGeldFeld.getText()); dasKassenLabel.setText(dieSteuerung.einzahlen(g)+" Cent"); } }); } public void anzeigenKasse(){ dasKassenLabel.setText(dieSteuerung.getKasse()+" Cent"); } } class OstPanel extends JPanel{ private JLabel dasProduktLabel = new JLabel("Nix"); private Steuerung dieSteuerung; private NordPanel dasNordPanel; private SuedPanel dasSuedPanel; public OstPanel(Steuerung steu, NordPanel nord, SuedPanel sued){ JButton tmp; setBackground(Color.green); dieSteuerung = steu; dasNordPanel = nord; dasSuedPanel = sued; setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); add(Box.createVerticalStrut(20)); tmp = new JButton("Produkt" + 0); add (tmp); tmp.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(MouseEvent e) { klickProdukt(0); } }); add(Box.createVerticalStrut(20)); tmp = new JButton("Produkt" + 1); add (tmp); tmp.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(MouseEvent e) { klickProdukt(1); } }); add(Box.createVerticalStrut(20)); tmp = new JButton("Produkt" + 2); add (tmp); tmp.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(MouseEvent e) { klickProdukt(2); } }); add(Box.createVerticalStrut(20)); tmp = new JButton("Produkt" + 3); add (tmp); tmp.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(MouseEvent e) { klickProdukt(3); } }); add(Box.createVerticalGlue()); add(dasProduktLabel); } private void klickProdukt(int i){ int n = dieSteuerung.verkaufe(i); if (n < 0) dasProduktLabel.setText("Es fehlen "+-n+" Cent"); else { dasSuedPanel.ausgeben(); dasProduktLabel.setText("Danke!"); } dasNordPanel.anzeigenKasse(); } } class MittePanel extends JPanel{ private JTextArea dieTextArea = new JTextArea(8,20); public MittePanel(Steuerung steu){ String s[]= new String[4]; setBackground(Color.white); setLayout(new FlowLayout()); add(dieTextArea); dieTextArea.append("Hier eine Übersicht der Produkte\n\n"); steu.init(s); for (int i=0;i<s.length;i++) dieTextArea.append(s[i]+" Cent\t Produkt "+i+"\n\n"); } } class SuedPanel extends JPanel{ private JTextArea dieAusgabeArea = new JTextArea(8,20); private Steuerung dieSteuerung; public SuedPanel(Steuerung steu){ setBackground(Color.red); setLayout(new FlowLayout()); dieSteuerung = steu; add(dieAusgabeArea); dieAusgabeArea.append("Ausgabe"); } public void ausgeben(){ String s[]= new String[8]; dieSteuerung.ausgebenWechselgeld(s); dieAusgabeArea.setText("Wechselgeld: \n"); int i=0; while (s[i]!=null) dieAusgabeArea.append(s[i++]+"\n"); } }
Quellcode Steuerung
public class Steuerung{ private String warenName[]={"Lila Lutscher","Blaue Bohnen","Mungos","Billies"}; private int warenPreis[]={100,90,200,35}; private int kasse; public void init(String s[]){ // Ausgeben des Angebots: warenName warenPreis int i; for (i=0;i<warenName.length;i++){ s[i]=warenName[i]+" : "+warenPreis[i]; } } public int einzahlen(int g){ // Betrag g wird zur Kasse hinzugefuegt return kasse += g; } public int getKasse(){ // Geldbetrag der Kasse zurueckgeben return kasse; } public void ausgebenWechselgeld(String s[]){ // Restgeld aus der Kasse zurueckgeben bis sie leer ist int mWerte[]={1,2,5,10,20,50,100,200}; String mNamen[]={"1 Cent","2 Cent","5 Cent","10 Cent","20 Cent","50 Cent","1 Euro","2 Euro"}; int i,a,j=0; i=7; while (kasse>0){ a=kasse/mWerte[i]; if (a>0) s[j++]=a+ " * "+mNamen[i]; kasse=kasse%mWerte[i]; i--; } } public int verkaufe(int w){ // Ware aus Schacht w soll gekauft werden if (kasse>=warenPreis[w]) return kasse -= warenPreis[w]; return kasse-warenPreis[w]; } }
Erstellen Sie ein Übersichts-Klassendiagramm ohne Attribute und Methoden für den Verkaufsautomat! Klassenübersichtsdiagramm
In Welcher Reihenfolge werden die Objekte erzeugt? Geschwätziges Programm: [Verkaufsautomat_V2-plapper_bluej.zip] [Verkaufsautomat_V2-plapper_intellij.zip]
Erstellen Sie für ein Klassendiagramm mit Attributen und Methoden mit diesen Klassen: Oberflaeche ,Steuerung, MyContainer, NordPanel, MittePanel, SuedPanel, OstPanel.
Klassendiagramm
Der Münzeinwurf soll geändert werden -für jede Münzsorte ein Button. Modifizieren Sie das Programm.
Lösung: Verkaufsautomat_V21_bluej.zip