javaFX mit Elementen

Juelin

Bekanntes Mitglied
Hallo,
ich benutze jdk-21, javaFX-13 und Apache-Netbeans IDE 21 auf Windows 10.
ich lerne gerade Java und habe mein erstes Projekt in javaFX gemacht.
Es ist ein einfaches Fenster mit einem Label (siehe Anhang bild1).
Dabei finde ich einige Dinge nicht, die ich gerne hätte.
Ihr müßt entschuldigen, aber ich komme von Delphi und da ist alles einfacher.
1. Im Fenster würde ich gerne die Hintergrundfarbe setzen. Die Methoden im Programm funktionieren nicht. (siehe Anhang App.java).
var scene = new Scene(fenster, 480, 480, Color.BLUE);
scene.setFill(Color.BLACK);
2. Kann ich bei dem Fenster die Eigenschaft "Visible" setzen und wie.
3. Bei dem Label möchte ich gerne folgende Eigenschaften setzen:
X-Position
Y-Position
Höhe
Breite
Habe schon im Internet gesucht, aber nix gefunden.
Für Hilfe wäre ich dankbar.
Alles Gute und Gruß
Jürgen
 

Anhänge

  • bild1.jpg
    bild1.jpg
    93,3 KB · Aufrufe: 0
  • App.java
    App.java
    2,3 KB · Aufrufe: 0
Moin Juelin,

erst einmal herzlich willkommen auch von mir hier im Forum !

1.+3
Ich bin mir ehrlich gesagt gerade gar nicht so sicher ob man den Hintergrund einer Scene setzen kann. Aber du kannst den Hintergrund der Pane setzen, die du der Scene zuweist. Das machst du aber in JavaFX am besten nicht im Code, sondern in einer separaten CSS Datei.

Der Stage oder der Pane weist du eine Stylesheet Datei zu, in dieser definierst du dann die Hintergrundfarbe.

Von absoluter Positioierung würde ich dir bis auf wenige Ausnahmen abraten, wenn sich die Fenstergröße ändert sieht das meistens sehr blöd aus. Besser ist es LayoutContainer zu verwenden. DerAnchorPane kommt hier einer absolute Positionierung am nähesten, hier kannst du deine Nodes absolut in Relation zu einem Anker Positionieren. In diesem Beispiel 100px Abstand nach oben und 50px Abstand nach rechts.

Java:
public void start(Stage primaryStage) {

        AnchorPane root = new AnchorPane();
        Label label = new Label("Hello, World!");
        AnchorPane.setTopAnchor(label, 100.0);
        AnchorPane.setRightAnchor(label, 50.0);

        root.getChildren().add(label);
        root.getStylesheets().add(getClass().getClassLoader()
                .getResource("styles.css").toExternalForm());

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("JavaFX Window");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

CSS:
.root {
    -fx-background-color: #yourcolor;
}

3
Das "Visible" eines Fensters steuerst du über die Methoden stage.show() bzw. stage.hide();

Allgemein:
Ich empfehle dir die GUI nicht im Java Code sondern über den SceneBuilder zu erstellen. Das ist alles deutlich übersichtlicher und du hast eine saubere Trennung im Code bzgl. View und Controller


Ebenfalls empfehlen (aber das ist eine religiöse Frage und da bekommst du bei jedem Programmierer eine andere Antwort) würde ich dir IntelliJ von Jetbrains. Die kostenlose Version ist vollkommen ausreichend, wenn du bereit bist 10 EUR im Monat zu zahlen ist aber der KI-Assistent eine extrem hilfreiche Zusatzfuktion.
 
Ach ja, bei richtig viel Code ist es besser diesen als Anlage beizufügen, bei weniger Code wie in deinem Beispiel aber ist es für die Nutzer angenehmer diesen direkt im Postu sehen. Hierfür dann die Code Tags nutzen, die findet du beim erstellen eines Posts im Menuband ganz links, gekennzeichnet als </>
 
Wenn es klappt super, Erfolgserlebnisse sind am Anfang am wichtigsten.

Ich kenne das Buch jetzt nicht, daher weiß ich nicht wie die Kapitel aufgebaut sind und ob du demnach an diesem Punkt noch nicht bist, aber an deinem Code fallen mir 3 Dinge sofort auf:

1. Schau dir dringend das Thema CSS in JavaFX an, so das du die ganzen Design Sachen aus dem Code bekommst, sonst wird es mit wachsender GUI bald sehr unübersichtlich.

2. Gleiches gilt für das Thema SceneBuilder / FXML in Java FX. Es bringt große Vorteile die GUI Erstellung und den Java Code zu trennen, so bekommt man ein gutes MVC oder ähnliches hin.

3. Nicht alles in eine Methode packen, sondern die Aufgaben in einzelne Abschnitte aufteilen und dann in separate Methoden aufsplitten.
 

Zurück
Oben