TextField Breite automatisch gebunden

Tintenfisch

Bekanntes Mitglied
Hallo allerseits,
folgendes Problem beschäftigt mich. Ich habe ein TextField, welches fehlerhafterweise bis zum seitlichen Rand der Scene geht. Weder Änderungen an der Breite der VBox noch an dem TextField haben irgendwelche Auswirkungen. Änderungen in der Höhe sind problemlos möglich. Gebunden wurde von mir nicht.
Vielleicht kennt ja jemand eine Lösung, danke fürs lesen.
 
welche library?
welchen szene Aufbau?
Code, 😎
Erstellt wurde es mit JavaFX.
Java:
public LoginWindow (BorderPane loginBorderPane) {
        this.loginVBox = new VBox(10);
        this.loginFieldLabel = new Label();
        this.userIDTextField = new TextField();
        this.passwordField = new PasswordField();
        this.enterBt = new Button("Log in");;
        this.loginVBox.getChildren().addAll(loginFieldLabel, userIDTextField, passwordField, enterBt);
        this.loginStackPane = new StackPane();
        this.loginStackPane.getChildren().add(loginVBox);
        loginVBox.setAlignment(Pos.CENTER);
        loginBorderPane.setCenter(loginStackPane);
    
        this.userIDTextField.setPromptText("User ID");
        this.passwordField.setPromptText("Password");
        this.loginFieldLabel.setText("Login!");
    }
[CODE lang="java" title="Main"]BorderPane loginBorderPane = new BorderPane();
Scene loginScene = new Scene(loginBorderPane, 700, 600);
LoginWindow loginWindow = new LoginWindow(loginBorderPane);[/CODE]
 
die BorderPane gibt deinem left Element so viel Platz wie es braucht
der Platz den das nicht existierende element braucht = 0
die BorderPane gibt deinem top Element so viel Platz wie es braucht
der Platz den das nicht existierende element braucht = 0

dh deine Border pane schiebt deine VBox komplett nach links oben
 
Zuletzt bearbeitet von einem Moderator:
Java:
public LoginWindow (BorderPane loginBorderPane) {
        this.loginFieldLabel = new Label("Login!");
        this.userIDTextField = new TextField();
        this.passwordField = new PasswordField();
        this.enterBt = new Button("Log in");;
        this.loginVBox = new VBox(10,loginFieldLabel, userIDTextField, passwordField, enterBt);
        this.loginStackPane = new StackPane(loginVBox);
        this.loginVBox.setAlignment(Pos.CENTER);
        loginBorderPane.setCenter(loginStackPane);
        this.userIDTextField.setPromptText("User ID");
        this.passwordField.setPromptText("Password");
    }
😎

PS: kann sein dass ein kleiner syntax fehler drin is habs nich ausprobiert
und wenn man den Rest der Klasse hätte könnte man sicher noch was rum wurschteln dass es übersichtlicher wird
 
@Joreyk danke, der Code funktioniert soweit und alle Elemente sind in der Horizontale zentralisiert. Allerdings besteht immer noch das Problem mit der nicht funktionierenden Größenänderung.
Wenn ich mit element.setPrefWidth(x); die breite des Buttons beispielsweise ändere, funktioniert dies einwandfrei. Bei dem TextField oder auch PasswordField aber, bleibt die Breite auf dem durch die Scene bestimmten Maximum.
 
Ausserdem PrefWidth ist "relativ" unwichtig...
wenn etwas zu lang oder zu kruz ist muss man im regelfall mit max und min arbeiten pref heist
"ich möchte am liebsten so viel Platz haben wenns geht wenn nich is auch gut"

min Width sagt " ich will Mindestens so viel haben sonst gehts nich"
und max width " ich will gar nicht mehr als das an Platz"

Und in der Hinsicht sind die Textfields , Textarea, echte Sturköpfe da muss man dem Parent des Nodes sagen dass er die Objekte klein häckseln soll 😀

bestimmt gehts auch anders aber hau drauf methoden sind manchmal ganz angenehm
 

Zurück
Oben