# Parkscheinautomat



## Vianlo (9. Nov 2010)

Hallöchen 

Ich soll einen Parkscheinautomaten programmieren und habe das Lay-Out schon komplett. Nun hapert es bei der Programmierung... Autorisierte Münzen sind 50 cent, 1€ und 2€. Ich tue mich jetzt etwas schwer mit dem addieren der Münzen. Ich weiß was ich schreiben will aber nicht wie. Also wenn schon eine Münze eingeworfen wurde dann soll sich die Münze die Gerade mit Hilfe eines Buttons eingeworfen wird dazu addieren und das Ergebnis soll im Textfeld geschrieben werden. Ich hab schon einiges ausprobiert doch nichts hat funktioniert. Ich hoffe ihr könnt Hilfe leisten, ich will das erstmal fertig und richtig haben bevor ich fortfahre...

Hier mein Quelltext :


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 09.11.2010
  * @author
  */

public class AutomatGUI extends JFrame {
  // Anfang Attribute

  private JTextField ZeitTextFeld = new JTextField();
  private JTextField EingeworfenTextFeld = new JTextField();
  private JButton FuenfzigButton = new JButton();
  private JButton EinEuroButton = new JButton();
  private JButton ZweiEuroButton = new JButton();
  private JTextArea JTextArea1 = new JTextArea("");
  private JButton BestaetigenButton = new JButton();
  private JTextField AusgabeTextfeld = new JTextField();
  // Ende Attribute

  public AutomatGUI(String title) {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 370;
    int frameHeight = 566;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten

    ZeitTextFeld.setBounds(8, 16, 129, 37);
    ZeitTextFeld.setText("00:00");
    ZeitTextFeld.setEditable(true);
    ZeitTextFeld.setBackground(Color.black);
    ZeitTextFeld.setFont(new Font("MS Sans Serif", Font.BOLD, 21));
    ZeitTextFeld.setForeground(Color.green);
    cp.add(ZeitTextFeld);
    EingeworfenTextFeld.setBounds(8, 64, 129, 37);
    EingeworfenTextFeld.setText("0,00€");
    EingeworfenTextFeld.setEnabled(true);
    EingeworfenTextFeld.setBackground(Color.black);
    EingeworfenTextFeld.setFont(new Font("MS Sans Serif", Font.BOLD, 21));
    EingeworfenTextFeld.setForeground(Color.green);
    cp.add(EingeworfenTextFeld);
    FuenfzigButton.setBounds(168, 16, 41, 81);
    FuenfzigButton.setText("0,50 €");
    FuenfzigButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        FuenfzigButton_ActionPerformed(evt);
      }
    });
    cp.add(FuenfzigButton);
    EinEuroButton.setBounds(232, 16, 41, 81);
    EinEuroButton.setText("1 €");
    EinEuroButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        EinEuroButton_ActionPerformed(evt);
      }
    });
    cp.add(EinEuroButton);
    ZweiEuroButton.setBounds(296, 16, 41, 81);
    ZweiEuroButton.setText("2 €");
    ZweiEuroButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        ZweiEuroButton_ActionPerformed(evt);
      }
    });
    cp.add(ZweiEuroButton);
    JTextArea1.setBounds(8, 120, 329, 297);
    JTextArea1.setText("Gebührenpflichtig\n\nWerktage                                                                            8h - 19h\nSamstag                                                                              9h - 20h\nSonn- und Feiertage                                                            10h - 18h\n\nParkgebühren\n\nje 30 Minuten                                                                       1,- €\n\nDer Automat gibt kein Wechselgeld, angenommen werden folgende \nMünzen:\n\n0,50 €\n1,00 €\n2,00€\n\nZur Bestätigung Ihrer Eingabe drücken Sie bitte nach Einwerfen der entsprechenden Münzen den grünen Knopf.\n\nVielen Dank");
    JTextArea1.setFont(new Font("MS Sans Serif", Font.PLAIN, 11));
    JTextArea1.setForeground(Color.(none));
    JTextArea1.setBackground(Color.gray);
    cp.add(JTextArea1);
    BestaetigenButton.setBounds(16, 424, 313, 49);
    BestaetigenButton.setText("Eingabe bestätigen");
    BestaetigenButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        BestaetigenButton_ActionPerformed(evt);
      }
    });
    cp.add(BestaetigenButton);
    AusgabeTextfeld.setBounds(16, 480, 313, 28);
    AusgabeTextfeld.setText("");
    AusgabeTextfeld.setBackground(Color.black);
    AusgabeTextfeld.setFont(new Font("MS Sans Serif", Font.BOLD, 15));
    AusgabeTextfeld.setForeground(Color.green);
    cp.add(AusgabeTextfeld);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }


  public void FuenfzigButton_ActionPerformed(ActionEvent evt) {
     // hier if-Abfrage ob schon eine Münze eingeworfen wurde !?
  }

  public void EinEuroButton_ActionPerformed(ActionEvent evt) {
     // hier if-Abfrage ob schon eine Münze eingeworfen wurde !?
  }

  public void ZweiEuroButton_ActionPerformed(ActionEvent evt) {
    // hier if-Abfrage ob schon eine Münze eingeworfen wurde !?
  }

  public void BestaetigenButton_ActionPerformed(ActionEvent evt) {
    // hier if-Abfrage ob schon eine Münze eingeworfen wurde !?
    
  }

  // Ende Methoden

  public static void main(String[] args) {
    new AutomatGUI("AutomatGUI");
  }
```


----------



## Michael... (9. Nov 2010)

Ich würde mal anfangen den Wert in einer Variable zu speichern.
Textkomponenten kann man mit setText(neuerString) eine neuen Inhalt übergeben.


----------



## jpee (9. Nov 2010)

Hallo Vianlo,

normalerweise baut man solche Anwendungen mit einer MVC-Architektur. Man hat also eine View(-klasse), die Oberfläche welche du schon fertig hast. Ein Model(-klasse) z.B. mit Objekt Parkscheinautomat, der bestimmte Methoden hat und Attribute besitzt. Das Modell kann man unabhängig von der View ausführen lassen, um zu sehen ob richtige Werte berechnet werden.

Der Parkscheinautomat hat z.B. nen Attribut int geldBetrag, der Anfangs immer null ist. Dann gibt es ne Methode putCoin(int muenze), welche den geldBetrag erhöht. Eine andere Methode validCoin() überprüft ob es sich um 0,5, 1 oder 2 Euro handelt. Dann kombinierst du diese Methoden. Dann brauchste wahrscheinlich noch eine Methode, welche den geldBetrag in eine Parkdauer umrechnet. Die Berechnungen kannst du mit System.out.println("") in einer Mainmethode testen.

Schließlich brauchste dann noch einen Controller, der die berechneten Werte an die Gui übergibt, oder die von Michael beschriebene setText Methode.  

Grüße
jpee


----------

