Lernpfad GUI-Programmierung mit dem Java-Editor

2.7 NumberField /TextField

Für die Eingabe einzeiliger, kurzer Texte dient die Klasse TextField. Sehr ähnlich dazu ist die Klasse NumberField, die analog zur Eingabe von Zahlen verwendet werden kann. Sowohl über dasTextField als auch über das NumberField können auch Informationen ausgegeben werden.
Da bei wir bei unserem Projekt Sommer- und Winterzeit mit Zahlen arbeiten, wird hier das NumberField vorgestellt.

Das Vorgehen zum Erzeugen eines Numberfields ist anolog zum Erzeugen eines Labels bzw. Buttons:

  1. Man wählt in der AWT-Symbolleiste den Button aus. (TextField )
  2. Dann zieht man im Formular-Fenster mit der Maus ein Rechteck auf. Dort wird das Objekt der Klasse NumberField positioniert.
  3. Über dem Objektinspektor gibt der Schaltfläche einen sprechenden Namen und ändert bei Bedarf Attributwerte.

Wichtige Attribute sind:

  • Background: Die Hintergrundfarbe
  • Editable: Falls auf true gesetzt, kann der Benutzer in das Nummern-/Textfeld schreiben und hat damit eine Eingabemöglichkeit.
  • Enabled: Falls auf true gesetzt, sind Eingaben durch den Benutzer möglich
    (hat hier die gleiche Wirkung wie Editable)
  • Font: Hier öffnet sich ein Fenster, über das die Werte der Attribute Schriftart, Schriftgröße, Schriftfarbe etc. gesetzt werden können.
  • Text: Die Beschriftung bei der Erzeugung des Objekts

Da Objekte der Klasse NumberField bzw. TextField werden zur Ein und Ausgabe von Zahlen bzw. Text genutzt werden, ist es wichtig die entsprechenden Methoden zu kennen:

  • Klasse NumberField:
    • Beim Aufruf folgender Methoden erhält man die im Nummernfeld eingegebene Zahl als Rückgabewert: getInt(), getFloat(), getDouble()
    • Bei Aufruf folgender Methode kann man die im Nummernfeld angezeigten Zahl ändern: setInt(), setFloat(), setDouble()
  • Klasse TextField:
    • Bei Aufruf der Methode getText() erhält man den im Textfeld eingegebene Zeichenkette (String) als Rückgabewert
    • Bei Aufruf der Methode setText(), kann man den im Textnfeld angezeigten Text ändern.
  • Bei beiden Klassen:
    Die Setter- und Getter-Methoden zu den anderen Attributen

Das Ereigniss bei dem Numberfield, auf das etwas passieren soll ist die Änderung des Textes. Ähnlich zur ActionPerformed-Methode bei den Buttons gibt es eine textValueChanged-Methode, deren Methodenrumpf sinnvoll gefüllt werden muss. Eine sinnvolle Aktion ist in unserem Kontext das Setzen der Stunde bzw. Minute. Daraus ergibt sich folgende textValueChanged-Methode für das Nummernfeld numberFieldStunden und analog dazu das entsprechende für die Minuten.

public void numberFieldStunden_TextValueChanged(TextEvent evt)
{
   zeit.StundenSetzen( numberFieldStunden.getInt());
}

Da wir nun eine Zeitanzeige haben, können nun die ActionPerformed-Methoden der Buttons die Zeitumstellung durchführen, d. h.

  • Sie rufen die Methode zur Winter- bzw. Sommerzeitumstellung bei dem Zeit-Objekt auf und
  • aktualisieren gegebenenfalls die Zeitanzeige

Da aktuell nicht angezeigt wird, ob Sommer- oder Winterzeit ist, kann man über eine bedingte Anweisung dem Benutzer noch eine Rückmeldung bei einem Klick auf den "falschen" Button geben:

public void buttonSommerzeit_ActionPerformed(ActionEvent evt)
{
   if(zeit.SommerzeitGeben()==false)
   {
      zeit.AufSommerzeitUmstellen();
      numberFieldStunden.setInt(zeit.StundeGeben());
      Ausgabe.setText(" ");
   }
   else
   {
      Ausgabe.setText("Es ist bereits Sommerzeit!");
   }
}

Analog die Aktion des Winterzeitbuttons programmieren und nicht vergessen regelmäßig zu testen.

 


Hinweise für Experten:

  • Man könnte die Klasse ZEIT und die Eingabe der Zeit über das Eingabefeld dahingehend verbessern, dass Stunden nur im Intervall [0; 23] und Minuten nur im Intervall [0; 59] erlaubt sind.