Textfelder in JavaFX
Ein Textfeld ist ein Objekt, welches einen Text enthalten kann und in einem Fenster angezeigt werden kann. Dieser Text kann beim Erzeugen des Objektes durch einen Argumentwert festgelegt werden.
Das Hauptfenster gilt als „Bühne“ (englisch “stage ”), auf der sich eine „Szene“ (englisch “scene ”), also ein Inhalt befindet, die ein Textfeld (englisch “text field ”) enthält.
Im folgenden Aufruf wird ein Textfeld erzeugt und in eine Szenerie (das Fenster ohne den Rahmen) eingefügt, welche dann mit »setScene« als Szenerie der Bühne festelegt wird.
Da es nicht erlaubt ist, ein Textfeld direkt auf eine Bühne zu stellen, muß es zunächst in eine Szenerie eingefügt werden. Eine Szenerie kann dann auf die Bühne gestellt werden.
Main.java
public final class Main extends javafx.application.Application
{public void start( final javafx.stage.Stage stage )
{stage.setScene
( new javafx.scene.Scene
( new javafx.scene.control.TextField
( "äöüÄÖÜ߀" )));stage.show(); }}
transcript
- Verwendete Methoden
- »javafx.stage.Stage#setScene(javafx.scene.Scene)« Plaziert die als Argumentwert übergebene Szenerie auf diese Bühne
- Verwendete Konstruktoren
- »javafx.scene.Scene(javafx.scene.Parent)« Baut eine Szenerie auf, die das übergebene Elter enthält. (Wir schreiben Konstruktoren manchmal in einer Kurzschreibweise mit den eingeklammerten Parameter direkt hinter dem Typnamen)
- »javafx.scene.TextField(java.lang.String)« Erzeugt ein Textfeld, welches die als Argumentwert übergebene Zeichenfolge enthält.
- Aussprachehinweis
- parent ˈpɛɚ ənt
Wir haben schon verschachtelte Erzeugungsaudrücke wie »new java.lang.Integer( new java.lang.String( "4" ))« kennengelernt. Dabei erzeugt der innere Erzeugungsaudruck ein neues Objekt, welches dann als Argument an den äußeren Erzeugungsaudruck übergeben wird. Auch in dem obigen Programm wurden solche verschachtelten Erzeugungsausdrücke verwendet.
Das folgende Programm zeigt eine teilweise Auflösung der Verschachtelung durch Deklaration einer Variablen »textField«.
Main.java
public final class Main extends javafx.application.Application
{public void start( final javafx.stage.Stage stage )
{final javafx.scene.control.TextField textField
= new javafx.scene.control.TextField( "äöüÄÖÜ߀" );stage.setScene( new javafx.scene.Scene( textField ));
stage.show(); }}transcript
Der Verschachtelung der Erzeugungsausdrücke entspricht eine Verschachtelung der erzeugten Objekte. Das heißt: Die erzeugte Szenerie enthält das erzeugte Textfeld und das Textfeld enthält einen Text. Diese Verschachtelung wird auch durch die folgende Abbildung wiedergegeben.
- Abbildung
stage.setScene
.-----------------------------------------------.
| new javafx.scene.Scene |
| .-------------------------------------------. |
| | new javafx.scene.control.TextField | |
| | .---------------------------------------. | |
| | | "äöüÄÖÜ߀" | | |
| | '---------------------------------------' | |
| '-------------------------------------------' |
'-----------------------------------------------'- Aussprache
- box bɑks (d)
- stage steɪdʒ (d)
Übungsaufgaben
Refaktor (1)
Schreiben Sie das folgende Programm so um, daß es keine Verschachtelungen runder Klammern mehr enthält, aber immer noch dasselbe macht (Refaktor).
Main.java
public final class Main extends javafx.application.Application
{public void start( final javafx.stage.Stage stage )
{final javafx.scene.control.TextField textField
= new javafx.scene.control.TextField( "abc" );stage.setScene( new javafx.scene.Scene( textField ));
stage.show(); }}
Übungsaufgabe
Jedes Textfeld enthält einen Text, den wir auch „den Text des Textfeldes“ nennen. Wenn man die Methode »getText()« eines Textfeldes aufruft, so erhält man den Text jenes Textfeldes als Wert des Aufrufs. (Anders gesagt: Der Aufruf der Methode »getText()« eines Textfeldes ergibt den Text, der in dem Textfeld steht.)
Schreiben Sie direkt hinter den Kommentar »/* B */« in dem folgenden Programm eine Anweisung, welche die Zeichenfolge des Textfeldes »textField« mit Hilfe von »java.lang.System.out.println« ausgibt. (Das Programm sollte dann »pqr« ausgeben.)
Main.java
public final class Main extends javafx.application.Application
{public void start( final javafx.stage.Stage stage )
{
final javafx.scene.control.TextField textField
= new javafx.scene.control.TextField( "pqr" );
/* B */javafx.application.Platform.exit();
java.lang.System.exit( 0 ); }}
Übungsaufgabe
Hinweis für den Dozenten ► Diese Übungsaufgabe sollte nicht vor der Nachbesprechung der vorigen Übungsaufgabe bearbeitet werden.
Die Zeichenfolge eines Textfeldes kann festgelegt werden, indem man die Methode »setText(java.lang.String)« jenes Textfeldes aufruft, dabei enthält der Aufruf den neuen Text als Argumentwert. (Anders gesagt: Der Aufruf der Methode »setText(java.lang.String)« eines Textfeldes bestimmt den Text, der in dem Textfeld steht.)
Schreiben Sie direkt vor die in der vorigen Übungsaufgabe eingefügte Ausgabeanweisung, eine Anweisung, welche die Zeichenfolge des Textfeldes als »ghi« festlegt. (Das Programm sollte dann »ghi« ausgeben.)