Zum Inhalt springen

Kurs:Java – ein schneller Einstieg/Projekt beenden/Quellcode

Aus Wikiversity

RabattPanel15

[Bearbeiten]
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

/**
  * Grafische Benutzerschnittstelle zur Berechnug von Rabatten.
  * Das Panel stellt die berechneten Daten immer mit den zuletzt
  * gltigen Eingabendaten als float values bereit. Sollte noch
  * keine Berechnung erfolgt sein, wird die Abfrage der Daten
  * stets (float)0.0 sein.
*/

class RabattPanel15 extends JPanel implements ActionListener {

/** Enthält die textuelle Eingabe des Ausgangsbetrags. */
private JTextField betragFeld  = new JTextField( 7);

/** Enthält die textuelle Eingabe der prozentualen Minderung des Ausgangsbetrags */
private JTextField rabattFeld  = new JTextField( 7);

/** Enthält die textuelle Wiedergabe des Ergebnisses der Rabatt-Berechnung */
private JTextField ausgabeFeld = new JTextField( 7);

/** Ausgangsbetrags */
private float betrag = 0;

/** Prozentuale Minderung des Betrags */
private float rabatt = 0;

/** Resultat der Rabattberechnung */
private float result = 0;

 //****************************/
 /** Ausgangsbetrag bergeben */
 //****************************/

 public float getBetrag() {
  return betrag;
 }

 //***********************************/
 /** Prozentuale Minderung bergeben */
 //***********************************/

 public float getRabatt() {
  return rabatt;
 }

 //*************************************/
 /** Resultat der Berechnung bergeben */
 //*************************************/

 public float getResult() {
  return result;
 }

 //*=======================================*/
 /** Ausgangsbetrag in Eingabefeld stellen */
 //*=======================================*/

 private void setBetrag( float value) {
  betragFeld.setText( ""+value);
 }

 //*==============================================*/
 /** Prozentuale Minderung in Eingabefeld stellen */
 //*==============================================*/

 private void setRabatt( float value) {
  rabattFeld.setText( ""+value);
 }

 //*===================================================================*/
 /** Wert eines Strings ermitteln. System wird im Fehlerfall verlassen */
 //*===================================================================*/

 private float valueOf( String text) {
 Float zahl = null;

  try   {
         zahl = new Float( text);
        }
  catch (NumberFormatException nfe)
        {
         System.out.println( "Unkorrekte Eingabe.");
         System.exit( 1);
        }
  return zahl.floatValue();
 }

 //*=====================================================*/
 /** Berechnug durchführen und konsistente Daten ablegen */
 //*=====================================================*/

 private void calculate() {
  betrag = valueOf( betragFeld.getText());
  rabatt = valueOf( rabattFeld.getText());
  result = betrag * (1 - rabatt / 100);
 }

 //*======================================================*/
 /** Test, ob (Eingabe)String in float-Wert wandelbar ist */
 //*======================================================*/

 private boolean inputOk( String input) {
 Float zahl = null;
  try   {
         zahl = new Float( input);
        }
  catch (NumberFormatException nfe)
        {
         return false;
        }
  return true;
 }

 //*=====================================================================================*/
 /** Farbe eines Eingabefeldes setzen. Gelb/rot und Focus wenn error, sonst schwarz/weiß */
 //*=====================================================================================*/

 private void setColor( JTextField field, boolean error) {
  if (error)
     {
      field.setBackground( Color.red);
      field.setForeground( Color.yellow);
      return;
     }

  /*------------------------------------*/
  /* error ist false, also schwarz/weiß */
  /*------------------------------------*/

  field.setBackground( Color.white);
  field.setForeground( Color.black);
 }

 //**********************************/
 /** Klasseninterner ActionListener */
 //**********************************/

 public void actionPerformed( ActionEvent ae) {
 JTextField requesterror = null;
 JTextField requestempty = null;

  ausgabeFeld.setText( "");

  /*----------------------------------------*/
  /* Test, ob Wert im Betragsfeld wandelbar */
  /*----------------------------------------*/

  if (!inputOk(betragFeld.getText()))
     {

      /*---------------------------*/
      /* Test, ob Betragsfeld leer */
      /*---------------------------*/

      if   (betragFeld.getText().length() < 1)
           {

            /*-----------------------------*/
            /* Feld ist leer, schwarz/weiß */
            /*-----------------------------*/

            setColor( betragFeld, false);
            requestempty = betragFeld;
           }
      else {

            /*-------------------------------*/
            /* Feld ist nicht leer, gelb/rot */
            /*-------------------------------*/

            setColor( betragFeld, true);
            requesterror = betragFeld;
           }
     }

  /*---------------------------------------*/
  /* Test, ob Wert im Rabattfeld wandelbar */
  /*---------------------------------------*/

  if (!inputOk(rabattFeld.getText()))
     {

      /*---------------------------*/
      /* Test, ob Betragsfeld leer */
      /*---------------------------*/

      if   (rabattFeld.getText().length() < 1)
           {

            /*-----------------------------*/
            /* Feld ist leer, schwarz/weiß */
            /*-----------------------------*/

            setColor( rabattFeld, false);
            if ((requestempty == null) &&
                (requesterror == null))
                requestempty = rabattFeld;
           }
      else {

            /*-------------------------------*/
            /* Feld ist nicht leer, gelb/rot */
            /*-------------------------------*/

            setColor( rabattFeld, true);
            if (requesterror == null)
                requesterror = rabattFeld;
           }
     }

  /*-------------------------------------------------------------*/
  /* Test, ob ein Feld den Focus fordert (inkonsistente Eingabe) */
  /*-------------------------------------------------------------*/

  if (requesterror != null)
     {
      requesterror.requestFocus();
      return;
     }

  /*-----------------------------------------------------*/
  /* Test, ob ein Feld den Focus fordert (leere Eingabe) */
  /*-----------------------------------------------------*/

  if (requestempty != null)
     {
      requestempty.requestFocus();
      return;
     }

  /*------------------------------------------*/
  /* Eingaben ob, Farbgebung auf schwarz/weiß */
  /*------------------------------------------*/

  setColor( betragFeld, false);
  setColor( rabattFeld, false);

  /*-------------------------------------------------------------------*/
  /* Berechnung durchfhren, anzeigen und Focus auf erstes Eingabefeld */
  /*-------------------------------------------------------------------*/

  calculate();
  ausgabeFeld.setText( ""+result);
  betragFeld.requestFocus();
 }

 //***********/
 /** CREATOR */
 //***********/

 public RabattPanel15() {

 /*-----------------------------------*/
 /* Panel mit Eingabefeldern aufbauen */
 /*-----------------------------------*/

 JPanel fields = new JPanel();
  fields.setLayout( new BorderLayout());
  fields.add( betragFeld,  BorderLayout.NORTH);
  fields.add( rabattFeld,  BorderLayout.CENTER);
  fields.add( ausgabeFeld, BorderLayout.SOUTH);
  ausgabeFeld.setEditable( false);

 /*----------------------------------------------*/
 /* Panel mit Labels der Eingabefeldern aufbauen */
 /*----------------------------------------------*/

 JPanel labels = new JPanel();
  labels.setLayout( new BorderLayout());
  labels.add( new JLabel( "Betrag"), BorderLayout.NORTH);
  labels.add( new JLabel( "Rabatt"), BorderLayout.CENTER);
  labels.add( new JLabel( "Endbetrag"), BorderLayout.SOUTH);

 /*-----------------------------------------------------------------*/
 /* Schaltfläche bereitstellen und internen ActionListener anbinden */
 /*-----------------------------------------------------------------*/

 JButton button = new JButton( "berechnen");
  button.addActionListener( this);

  /*----------------------------------------*/
  /* Panels und Schaltfläche zusammenfassen */
  /*----------------------------------------*/

  this.setLayout( new BorderLayout());
  this.add( labels, BorderLayout.WEST);
  this.add( fields, BorderLayout.EAST);
  this.add( button, BorderLayout.SOUTH);
 }
}