/***************************************************************/ /* Prof. Dr. Carsten Vogt */ /* FH Koeln, Fak. 07 / Nachrichtentechnik */ /* http://www.nt.fh-koeln.de/vogt */ /* */ /* Das Programm zeigt am Beispiel von Bankkonten die Benutzung */ /* des Klassenkonzepts, insbesondere */ /* - Definition von Klassen mit klassen- und objektbezogenen */ /* Attributen / Methoden sowie oeffentlichen und privaten */ /* Attributen, */ /* - Erzeugung und Loeschung von Objekten und */ /* - Vererbung mit Nutzung und Ueberschreiben von Methoden der */ /* Superklasse. */ /* Diese Datei enthaelt ein fensterorientiertes Testprogramm; */ /* die Klassendefinitionen stehen in den Dateien Konto.java */ /* und GeschuetztesKonto.java. */ /* Alle drei Dateien muessen zusammen uebersetzt werden. */ /***************************************************************/ import java.awt.*; import java.awt.event.*; import javax.swing.*; /********************************************************** Die Klasse 'KontoOberflaeche' definiert eine grafische Oberflaeche zur Arbeit mit den Klassen 'Konto' und 'GeschuetztesKonto'. ***********************************************************/ class KontoOberflaeche extends JFrame { Konto konto1ungesch = new Konto(0); GeschuetztesKonto konto2gesch = new GeschuetztesKonto(0,4711); /* Radiobuttons zur Auswahl eines Kontos */ private JRadioButton[] kontoWahl = { new JRadioButton("Konto 1 (ungeschuetzt = ohne PIN)"), new JRadioButton("Konto 2 (geschuetzt = mit PIN 4711)") }; private ButtonGroup kontoWahlGruppe = new ButtonGroup();; /* Buttons fuer das Einzahlen und Abheben */ private JButton einzahlen, abheben; /* Textfelder, die die gewuenschte Aktion bzw. die Kontostaende anzeigen */ private JTextField aktionFeld, stand1Feld, stand2Feld; /* Textfelder, in denen der gewuenschte Betrag bzw. die PIN eingegeben werden koennen und zugehoerige numerische Variablen */ private JTextField betragFeld; private JPasswordField pinFeld; /* Konstruktor: Aktionen bei Erzeugung der Grafik-Oberflaeche */ KontoOberflaeche(String s) { /* Erzeugen des Fensterrahmens */ super(s); JLabel lab; /* Hilfsvariable fuer Texte */ /* Container fuer Buttons und Textfelder */ Container c = getContentPane(); /* Erzeugen des Layouts und Setzen der Farbe */ c.setLayout(new GridLayout(15,1)); c.setForeground(Color.black); /* Einfügen der Radiobuttons zur Auswahl des Kontos: in den Container und in eine Gruppe, die sicherstellt, dass nur ein Button gleichzeitig ausgewaehlt ist. Vorauswahl des ersten Buttons. */ lab = new JLabel("Auswahl des Kontos:"); lab.setForeground(Color.black); c.add(lab); c.add(kontoWahl[0]); kontoWahlGruppe.add(kontoWahl[0]); kontoWahl[0].setSelected(true); c.add(kontoWahl[1]); kontoWahlGruppe.add(kontoWahl[1]); /* Erzeugen der Buttons zum Einzahlen und Abheben */ lab = new JLabel("gewuenschte Aktion:"); lab.setForeground(Color.black); c.add(lab); einzahlen = new JButton("Einzahlen"); c.add(einzahlen); abheben = new JButton("Abheben"); c.add(abheben); /* Listener fuer Buttons */ ButtonListener lis = new ButtonListener(); einzahlen.addActionListener(lis); abheben.addActionListener(lis); /* Erzeugen der Textfelder */ lab = new JLabel("gewuenschter Betrag (Eingabefeld):"); lab.setForeground(Color.black); c.add(lab); betragFeld = new JTextField(9); c.add(betragFeld); lab = new JLabel("PIN (Eingabefeld):"); lab.setForeground(Color.black); c.add(lab); pinFeld = new JPasswordField(9); c.add(pinFeld); lab = new JLabel("gewaehlte Aktion (Ausgabefeld):"); lab.setForeground(Color.black); c.add(lab); aktionFeld = new JTextField(25); c.add(aktionFeld); stand1Feld = new JTextField(9); lab = new JLabel("Staende Konto 1 / Konto 2 (Ausgabefeld):"); lab.setForeground(Color.black); c.add(lab); c.add(stand1Feld); stand1Feld.setText(String.valueOf(konto1ungesch.abfragen())); stand2Feld = new JTextField(9); c.add(stand2Feld); stand2Feld.setText(String.valueOf(konto2gesch.abfragen())); /* Komponenten anordnen ... */ pack(); /* ... und sichtbar machen */ setVisible(true); } /* Aktionen beim Druecken eines Buttons */ class ButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { double betrag; int pin; /* gewuenschten Betrag und PIN ermitteln */ if (betragFeld.getText().length()>0) betrag = Double.parseDouble(betragFeld.getText()); else betrag = 0; if (pinFeld.getPassword().length>0) pin = Integer.parseInt(new String(pinFeld.getPassword())); else pin = 0; /* Ausgabefeld fuer Aktion standardmaessig auf schwarze Buchstabenfarbe setzen */ aktionFeld.setForeground(Color.black); /* Aktion fuer Konto 1 (ungeschuetzt) */ if (kontoWahl[0].isSelected()) { if (e.getActionCommand().equals("Einzahlen")) { konto1ungesch.einzahlen(betrag); aktionFeld.setText("Einzahlen Konto 1 - OK"); } else { if (konto1ungesch.abheben(betrag)>0) aktionFeld.setText("Abheben Konto 1 - OK"); else { aktionFeld.setForeground(Color.red); aktionFeld.setText("Abheben Konto 1 - FEHLER"); } } } /* Aktion fuer Konto 2 (geschuetzt) */ if (kontoWahl[1].isSelected()) { if (e.getActionCommand().equals("Einzahlen")) { konto2gesch.einzahlen(betrag); aktionFeld.setText("Einzahlen Konto 2 - OK"); } else { if (konto2gesch.abheben(betrag,pin)>0) aktionFeld.setText("Abheben Konto 2 - OK"); else { aktionFeld.setForeground(Color.red); aktionFeld.setText("Abheben Konto 2 - FEHLER"); } } } stand1Feld.setText(String.valueOf(konto1ungesch.abfragen())); stand2Feld.setText(String.valueOf(konto2gesch.abfragen())); } } public static void main(String args[]) { /* Erzeugung der Oberflaeche */ new KontoOberflaeche("Bankkontotest"); } } public class KontoTestGraf { public static void main(String args[]) { /* Erzeugung der Oberflaeche */ new KontoOberflaeche("Bankkontotest"); } }