Oberfläche mit Java-Swing
Downloads
BlueJ-Projekt: Verkaufsautomat_V2_bluej.zip
IntelliJ-Projekt: Verkaufsautomat_V2_intellij.zip
Quelltext der Oberfläche
Quellcode [Verkaufsautomat_V2_bluej/Oberflaeche.java ] 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
Quellcode [Verkaufsautomat_V2_bluej/Steuerung.java ] 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