Макет Javafx Gridpane действительно странный - PullRequest
0 голосов
/ 02 августа 2020

Я попытался создать простую сетку, которая просила бы пользователя ввести два числа. По какой-то причине элементы просто ходили повсюду. Я почти уверен, что правильно установил ограничения.

Это мой класс настроек.

public class Settings {
    
    public static void display() {
        GridPane layout = new GridPane();
        layout.setPadding(new Insets(10));
        layout.setVgap(8);
        layout.setHgap(10);
        Scene scene = new Scene(layout, 600, 400);
        
        //Title label
        Label label = new Label("Settings");
        GridPane.setConstraints(label, 1, 0);
        
        //Minutes label
        Label minutesLabel = new Label("Minutes:");
        GridPane.setConstraints(minutesLabel, 0, 1);
        
        //Minutes input
        TextField minutesInput = new TextField();
        minutesInput.setPromptText("minutes");
        GridPane.setConstraints(minutesInput, 1, 1);
        
        //Seconds label
        Label secondsLabel = new Label("Seconds:");
        GridPane.setConstraints(secondsLabel, 0, 2);
        
        //Seconds input
        TextField secondsInput = new TextField();
        secondsInput.setPromptText("seconds");
        GridPane.setConstraints(secondsInput, 1, 2);
        
        //Ok button
        Button okButton = new Button("Ok");
        okButton.setOnAction(e -> {
            try {
                int minutes = Integer.parseInt(minutesInput.getText());
                int seconds = Integer.parseInt(secondsInput.getText());
                if(minutes > 59) minutes = 59;
                else if(minutes < 1) minutes = 1;
                if(seconds > 59) seconds = 59;
                else if(seconds < 1) seconds = 1;
                Main.updateMinsAndSecs(minutes, seconds);
                Main.setSceneMain();
            }catch(NumberFormatException numberFormatException) {
                label.setText("Please enter valid number(s)");
            }catch(FileNotFoundException fileNotFoundException) {
                fileNotFoundException.printStackTrace();
            }
        });
        okButton.setStyle("-fx-background-radius: 0;");
        GridPane.setConstraints(secondsInput, 0, 3);
        
        //Cancel button
        Button cancelButton = new Button("Cancel");
        cancelButton.setOnAction(e -> {
            Main.setSceneMain();
        });
        cancelButton.setStyle("-fx-background-radius: 0;");
        GridPane.setConstraints(secondsInput, 1, 3);
        
        //Apply button
        Button applyButton = new Button("Apply");
        applyButton.setOnAction(e -> {
            try {
                int minutes = Integer.parseInt(minutesInput.getText());
                int seconds = Integer.parseInt(secondsInput.getText());
                if(minutes > 59) minutes = 59;
                else if(minutes < 1) minutes = 1;
                if(seconds > 59) seconds = 59;
                else if(seconds < 1) seconds = 1;
                Main.updateMinsAndSecs(minutes, seconds);
            }catch(NumberFormatException numberFormatException) {
                label.setText("Please enter valid number(s)");
            }catch(FileNotFoundException fileNotFoundException) {
                fileNotFoundException.printStackTrace();
            }
        });
        applyButton.setStyle("-fx-background-radius: 0;");
        GridPane.setConstraints(secondsInput, 2, 3);
    
        layout.getChildren().addAll(label, minutesLabel, minutesInput, secondsLabel, secondsInput, okButton, cancelButton, applyButton);
    
        Main.window.setScene(scene);
        Main.window.setTitle("Settings");
    }
}

Вот как это оказалось.

скриншот

Я бы хотел, чтобы решение не использовало f xml.

Stackoverflow говорит, что мой пост - это в основном код, и мне нужно больше деталей, поэтому я также скажу, что у меня есть использовал Gridpane для создания простого экрана входа в систему, и это было довольно хорошо. Код был в основном таким же, за исключением позиционирования и содержимого.

1 Ответ

0 голосов
/ 03 августа 2020

Вы устанавливаете различные ограничения для secondsInput вместо okButton, cancelButton и applyButton:

    GridPane.setConstraints(secondsInput, 1, 2);
    GridPane.setConstraints(secondsInput, 0, 3);
    GridPane.setConstraints(secondsInput, 1, 3);
    GridPane.setConstraints(secondsInput, 2, 3);

Вместо:

    GridPane.setConstraints(secondsInput, 1, 2);
    GridPane.setConstraints(okButton, 0, 3);
    GridPane.setConstraints(cancelButton, 1, 3);
    GridPane.setConstraints(applyButton, 2, 3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...