‏ ‏ ‎ ‏ ‏ ‎

1. Exkurs: JavaFX-Spinner

A Spinner in JavaFX is a UI control that allows users to select a value from a sequence by either typing it or using arrow buttons to increment/decrement the value.

1.1. Basic Usage

To create a numeric Spinner:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Spinner;
import javafx.scene.control.SpinnerValueFactory;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class SpinnerExample extends Application {

    @Override
    public void start(Stage stage) {
        // Create a Spinner for numbers
        Spinner<Integer> spinner = new Spinner<>();

        // Set the value factory (range: 1 to 100, initial value: 50, step: 1)
        spinner.setValueFactory(new SpinnerValueFactory.IntegerSpinnerValueFactory(1, 100, 50, 1));

        // Add spinner to the scene
        VBox root = new VBox(10, spinner);
        root.setStyle("-fx-padding: 20; -fx-alignment: center;");

        Scene scene = new Scene(root, 300, 200);
        stage.setScene(scene);
        stage.setTitle("JavaFX Spinner Example");
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}

1.2. Spinner with Strings

A Spinner can use a list of values, such as strings:

Spinner<String> stringSpinner = new Spinner<>();
SpinnerValueFactory<String> valueFactory =
    new SpinnerValueFactory.ListSpinnerValueFactory<>(FXCollections.observableArrayList("Option 1", "Option 2", "Option 3"));

stringSpinner.setValueFactory(valueFactory);

1.3. Event Handling

You can listen to changes in the spinner’s value using a listener:

spinner.valueProperty().addListener((observable, oldValue, newValue) -> {
    System.out.println("Selected Value: " + newValue);
});

1.4. Editable Spinner

By default, a Spinner is editable. You can disable editing as follows:

spinner.setEditable(false);

1.5. Styling the Spinner

The Spinner can be styled using CSS:

.spinner {
    -fx-background-color: lightblue;
    -fx-padding: 5;
}

To apply the CSS file:

scene.getStylesheets().add("style.css");

1.6. Advanced Example: Spinner with Different Step Sizes

You can configure a Spinner with specific step sizes:

Spinner<Double> doubleSpinner = new Spinner<>();
doubleSpinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0.0, 10.0, 5.0, 0.5));

1.7. Common Methods

  • getValue(): Retrieves the current value of the spinner.

  • setValue(): Sets a specific value for the spinner.

  • increment(int steps): Increases the spinner’s value by a specified number of steps.

  • decrement(int steps): Decreases the spinner’s value by a specified number of steps.

1.8. References

This content was createt with ChatGPT (Prompt: How to to use spinner in JavaFx)

2. 2025-03-25

2.1. Sockets

Erstellen des ServerSockets
var serverSocket = ServerSocketFactory
                .getDefault()
                .createServerSocket(8080);
  1. Handler für einkommende Requests (ClientSocket)

Socket clientSocket = serverSocket.accept();
handleConnect(clientSocket);
  1. Streams für Input und Output

var outputStream = clientSocket.getOutputStream();
var inputStream = clientSocket.getInputStream();

3. 2025-05-26

3.1. Übung

  • Erstellen Sie eine Liste der Klasse mit Vor- und Nachnamen sowie der PLZ

  • Nun erstellen Sie für Vor- und Nachnamen sowie die PLZT jeweils einen binären Suchbaum. Als Datenelement verwenden Sie den Index der einzelnen Elemente (Personen) in der Liste

  • Bei gleichen Elementen in Personen (zB PLZ 4060) werden als Ergebnis mehrere Personen ausgegeben

  • Bei jedem Zugriff ist die Anzahl der Vergleichvorgänge im Baum auszugeben.

  • Der Baum ist grafisch darzustellen bspw als JavaFx Baumelement oder auf einem Canvas oder auch in plantuml (https://plantuml.com/de/mindmap-diagram)

  • Erweiterung

    • Wird die Liste mit Personen geändert, sind natürlich sämtliche Suchbäume zu aktualisieren.

    • Implementieren Sie die Ausgabe in preorder, postorder, levelorder, inorder

3.2. Bäume

Rang eines Baumes

Anzahl seiner direkten Nachfolger

Ordnung des Baumes

Maximaler Rang seiner Knoten

Traversierung

Systematisches Durchlaufen von Datenstrukturen wie Bäume, Arrays oder Listen

Rekursion

Rekursion ist eine Technik, bei der sich eine Methode selbst aufruft, um ein Problem zu lösen. Dabei wird ein großes Problem in kleinere Teilprobleme zerlegt – bis zu einem Abbruchpunkt (Abbruchbedingung).

3.2.1. Baumtraversierungen

  • preorder

    • zuerst die Wurzel

    • dann linken Teilbaum

    • zuletzt rechten Teilbaum

  • inorder

    • zuerst linken Teilbaum

    • dann die Wurzel

    • zuletzt rechten Teilbaum

  • postorder

    • zuerst linken Teilbaum

    • dann rechten Teilbaum

    • zuletzt die Wurzel

  • levelorder (Breitensuche)

    • Ebene für Ebene von oben nach unten

    • innerhalb jeder Ebene von links nach rechts

Diagram

3.2.2. Spezielle Bäume

  • Binärbaum

    • Jeder Knoten hat maximal 2 Nachfolger

  • Balancierter Baum

    • AVL Baum

  • Vollständiger Baum

    • Ein vollständiger Baum ist ein Binärbaum, bei dem alle Ebenen vollständig gefüllt sind, außer ggf. der letzten die von link nach rechts gefüllt ist.

    • Unterste Ebene ist von links beginnend gefüllt

    • Höhere Ebenen sind gänzlich gefüllt

3.2.3. Binärer Suchbaum

  • Ein binärer Suchbaum ist eine Binärbaum mit Ordnungsrelation.

  • Aufgaben

    • Suchen im binären Suchbaum

    • Einfügen im binären Suchbaum

    • Löschen im binären Suchbaum