Kurs:Java – ein schneller Einstieg/Projekt beenden/Quellcode
Erscheinungsbild
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);
}
}