Vertikale Anordnungen in JavaFX (Vertikale Anordnungen in JavaFX), Lektion, Seite 724159
https://www.purl.org/stefan_ram/pub/vboxes_javafx (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Vertikale Anordnungen in JavaFX 

Das folgende Programm zeigt das Erstellen eines Fensters mit zwei  Textfeldern.

Da eine Szenerie immer nur ein  Elter (»javafx.scene.Parent«) enthalten darf, müssen die beiden Textfelder erst in einen Bereich (»javafx.scene.layout.Pane«), wie beispielsweise eine »VBox« verpackt werden.

Main.java

public final class Main extends javafx.application.Application
{

public void start( final javafx.stage.Stage stage )
{

final javafx.scene.layout.VBox vbox
= new javafx.scene.layout.VBox();

final javafx.scene.control.TextField textField
= new javafx.scene.control.TextField( "textField" );
vbox.getChildren().add( textField ); // pane.getChildren().add(javafx.scene.Node)

final javafx.scene.control.TextField textField1
= new javafx.scene.control.TextField( "textField1" );
vbox.getChildren().add( textField1 );

stage.setScene( new javafx.scene.Scene( vbox ));
stage.show(); }}

transcript
 

Dies erinnert an eine if-Anweisung, die immer nur eine  innere Anweisung akzeptiert. Mehrere Anweisungen müssen mit geschweiften Klammern zu einer Anweisung zusammengefaßt werden, wenn sie von einem if-Kopf kontrolliert werden sollen.

Wenn mehrere Oberflächenelemente des gleichen Typs in einer graphischen Benutzeroberfläche verwendet werden sollen, so muß für jedes Oberflächenelement ein neues Objekt angelegt werden. Es ist nicht erlaubt, ein Objekt mehrfach in eine Anzeigehierarchie einzufügen.

 

Man beachte, daß das Oberflächenelement, das angezeigt werden soll, Argument des javafx.scene.Scene-Konstruktors wird. Dies sollte in der Regel dasjenige Oberflächenelement sein, in dem alle anderen enthalten sind.

Übungsfragen

?   Übungsfrage 0

Welchen Typ hat der Parameter des in dem folgenden Ausschnitt aus einem obenstehenden Programm verwendeten Scene-Konstruktors?

Programmausschnitt
stage.setScene( new javafx.scene.Scene( textField ));

?   Übungsfrage 1

Warum kann ein Ausdruck vom Typ »javafx.scene.control.TextField« als Argument des Scene-Erzeugungsausdrucks verwendet werden?

Programmausschnitt
stage.setScene( new javafx.scene.Scene( textField ));

?   Übungsfrage 2

Warum kann ein Ausdruck vom Typ »javafx.scene.layout.VBox« als Argument des Scene-Erzeugungsausdrucks verwendet werden?

Programmausschnitt
stage.setScene( new javafx.scene.Scene( vbox ));

Übungsaufgaben

Übungsaufgabe

Das folgende Programm legt zwei  Textfelder an.

Ändern Sie das Programm so ab, daß drei  Textfelder angelegt werden.

Main.java

public final class Main extends javafx.application.Application
{

public void start( final javafx.stage.Stage stage )
{
final javafx.scene.layout.VBox vbox
= new javafx.scene.layout.VBox();

final javafx.scene.control.TextField textField
= new javafx.scene.control.TextField( "textField" );
vbox.getChildren().add( textField );

final javafx.scene.control.TextField textField1
= new javafx.scene.control.TextField( "textField" );
vbox.getChildren().add( textField1 );

stage.setScene( new javafx.scene.Scene( vbox ));
stage.show(); }}

Übungsaufgabe

Das folgende Programm fügt Textfelder in eine »VBox« ein.

Ändern Sie das Programm so ab, daß an Stelle der »VBox« eine »HBox« verwendet wird. (Hierzu kann das folgende Programm oder die Lösung der vorigen Übungsaufgabe als Ausgangspunkt genommen werden.)

Main.java

public final class Main extends javafx.application.Application
{

public void start( final javafx.stage.Stage stage )
{
final javafx.scene.layout.VBox vbox
= new javafx.scene.layout.VBox();

final javafx.scene.control.TextField textField
= new javafx.scene.control.TextField( "textField" );
vbox.getChildren().add( textField );

final javafx.scene.control.TextField textField1
= new javafx.scene.control.TextField( "textField" );
vbox.getChildren().add( textField1 );

stage.setScene( new javafx.scene.Scene( vbox ));
stage.show(); }}

Hinweis: Der speziellste gemeinsame Obertyp von »javafx.scene.layout.VBox« und »javafx.scene.layout.HBox« ist übrigens »javafx.scene.layout.Pane«.

Übungsaufgabe ⃗

Probieren Sie, VBoxes und HBoxes ineinander zu verschachteln.

Beispiel für eine Verschachtelung
.-HBox------------------------------------.
| .-VBox------------. .-VBox------------. |
| |.-TextField-----.| |.-TextField-----.| |
| || || || || |
| |'---------------'| |.---------------.| |
| |.-TextField-----.| |.-TextField-----.| |
| || || || || |
| |'---------------'| |'---------------'| |
| '-----------------' '-----------------' |
'-----------------------------------------'

Übungsaufgabe ⃗ ⃗

In der Lösung der vorigen Aufgabe sollen Blöcke verwendet werden, um Namen wiederverwenden zu können.

Bei dieser Übungsaufgabe wird angenommen, daß die Lösung der vorherigen Aufgabe für jedes Objekt einen eigenen Namen verwendet hatte. Falls jemand schon von Anfang an den gleichen Namen für Objekte des gleichen Typ verwendet haben sollte, dann hat er diese Aufgabe hier bereits erledigt.

Übungsaufgabe ⃗ ⃗

Die Lösung der vorigen Aufgabe soll überarbeitet werden: Durch Deklaration statischer Methoden sollen Wiederholungen größerer Programmteile vermieden werden.

(Danach sollte es erkennbar sein, daß eine Änderung hin zu mehr Spalten und Zeilen nun viel einfacher ist als bei dem ursprünglichen Programm.)

Bei dieser Übungsaufgabe wird angenommen, daß in der Lösung der vorherigen Aufgabe noch keine Methoden für wiederkehrende Blöcke definiert wurden. Falls jemand schon von Anfang Methoden definiert hat, um Wiederholungen im Quelltext zu verhindern, dann hat er diese Aufgabe hier bereits erledigt.

Übungsaufgabe ⃗ ⃗

Erstellen Sie ein Programm mit zwei ineinander verschachtelten Schleifen.

Die äußere  Schleife soll VBoxes zu einer HBox hinzufügen.

Die innere  Schleife soll Textfelder zu dem in der äußeren Schleife hinzugefügten  VBoxes hinzufügen.

Dabei soll jede Schleife zwei bis acht Wiederholungen aufweisen. Die genaue Anzahl der Wiederholungen soll jeweils durch den Zufall festgelegt werden.

Die äußere HBox soll alsdann zur Anzeige gebracht werden.

Übungsaufgabe ⃗

Probieren Sie, andere Untertypen von »javafx.scene.layout.Pane« zu verwenden als VBoxes und HBoxes. Beispielsweise FlowPane. FlowPane ordnet seinen Inhalt zunächst waagerecht  an, beginnt aber eine neue Zeile, wenn rechts kein Platz mehr ist. Um dies zu sehen, sollten vom Programm einige Inhalte in die FlowPane eingefügt werden (beispielsweise mit einer Schleife, die ein Dutzend Textfelder einfügt); die Breite des Fensters sollte dann durch den Bediener des Programms verändert  werden, um die Regeln für die Anordnung zu sehen.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram724159 stefan_ram:724159 Vertikale Anordnungen in JavaFX Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724159, slrprddef724159, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/vboxes_javafx