Содержание диалога не будет охватывать всю ширину диалога - PullRequest
0 голосов
/ 31 января 2019

У меня есть диалог JavaFX, и кажется, что содержимое сетки не охватывает всю ширину диалога.Прямо сейчас он простирается до МАКСИМАЛЬНОЙ левой части диалогового окна, до ширины кнопки ОК.Я хотел бы удалить пробел справа от моих полей ввода.Или охватите всю ширину.

Я пробовал:

  • Настройка минимальной ширины области сетки

  • Настройкаминимальная ширина текстовых полей

  • Установка ширины сцены

Я довольно сильно растерялся.

Вот мой код!

// Create the custom dialog.
Dialog dialog = new Dialog<>();

dialog.initOwner(mainStage);

// Set Custom Icon
Stage stage = (Stage) dialog.getDialogPane().getScene().getWindow();
stage.getIcons().add(new Image(Constants.kApplicationIcon));

dialog.getDialogPane().getStylesheets().add(Constants.kRootStylesheet);
dialog.getDialogPane().getStyleClass().add("accountDialog");

dialog.setTitle("New User Detected");
dialog.setHeaderText("Please complete user registration!");

// Set the button types.
ButtonType loginButtonType = new ButtonType("Create Account", ButtonBar.ButtonData.OK_DONE);
dialog.getDialogPane().getButtonTypes().addAll(loginButtonType, ButtonType.CANCEL);

// Create the username and password labels and fields.
GridPane grid = new GridPane();
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(20, 150, 10, 10));
grid.setAlignment(Pos.CENTER);
grid.setId("accountGrid");

TextField firstName = new TextField("First Name");
TextField lastName = new TextField("Last Name");

TextField email = new TextField("Email");
TextField gender = new TextField("Gender");

firstName.setId("textField");
lastName.setId("textField");

firstName.setPromptText("");
lastName.setPromptText("");

gender.setPromptText("");
email.setPromptText("");

email.setId("textField");
gender.setId("textField");

ToggleGroup studentRadioGroup = new ToggleGroup();

RadioButton mentorRadio = new RadioButton("Mentor");
RadioButton studentRadio = new RadioButton("Student");

studentRadio.fire();

mentorRadio.setToggleGroup(studentRadioGroup);
studentRadio.setToggleGroup(studentRadioGroup);

grid.add(new Label("First Name:"), 0, 0);
grid.add(firstName, 1, 0);
grid.add(new Label("Last Name:"), 0, 1);
grid.add(lastName, 1, 1);
grid.add(new Label("Email:"), 0, 2);
grid.add(email, 1, 2);
grid.add(new Label("Gender:"), 0, 3);
grid.add(gender, 1, 3);

GridPane.setHalignment(grid, HPos.CENTER);

GridPane.setHalignment(studentRadio, HPos.CENTER);
GridPane.setHalignment(studentRadio, HPos.CENTER);

grid.add(studentRadio, 0, 4);
grid.add(mentorRadio, 1, 4);

grid.setGridLinesVisible(true);

// Enable/Disable login button depending on whether a username was entered.
Node loginButton = dialog.getDialogPane().lookupButton(loginButtonType);
loginButton.setDisable(true);

// Do some validation (using the Java 8 lambda syntax).
firstName.textProperty().addListener((observable, oldValue, newValue) -> {
    loginButton.setDisable(newValue.trim().isEmpty());
});

dialog.getDialogPane().setContent(grid);

// Request focus on the firstname field by default.
Platform.runLater(firstName::requestFocus);

Optional<ButtonType> result = dialog.showAndWait();
ArrayList<String> data = new ArrayList<>();

System.out.println(result.get().toString());

if (result.get().getButtonData() == ButtonBar.ButtonData.OK_DONE) {
    data.add("TRUE");
    data.add(firstName.getText());
    data.add(lastName.getText());
    data.add(email.getText());
    data.add(gender.getText());
    data.add(mentorRadio.isSelected() ? "TRUE" : "FALSE");

} else {
    data.add("FALSE");

}

return data; 

Вот изображение результата.Я хочу снова;либо удалите все пробелы справа от моей сетки, либо растяните мою сетку, чтобы она соответствовала всей ширине.

Изображение результата

Ответы [ 3 ]

0 голосов
/ 31 января 2019

Размер GridPane изменяется до желаемого размера.Заполнение справа от 150 предотвращает увеличение TextField s в этом направлении.

grid.setPadding(new Insets(20, 150, 10, 10)); // sets right padding to 150

Если вы хотите увеличить TextField s до максимального размера Label s / *На 1008 * слева вы должны использовать ColumnConstraint s, чтобы указать, что второй столбец должен всегда расти:

ColumnConstraints constraints = new ColumnConstraints();
constraints.setHgrow(Priority.ALWAYS);

grid.getColumnConstraints().addAll(new ColumnConstraints(), constraints);

Также можно указать предпочтительную ширину второго столбца с помощью ColumnConstraints object.

Чтобы проверить поведение при изменении размера окна, вы можете сделать диалоговое окно с изменяемым размером:

dialog.setResizable(true);

Чтобы увидеть область, охватываемую GridPane, было бы полезно назначитьфон:

grid.setStyle("-fx-background-color: red;");
0 голосов
/ 01 февраля 2019

Вы создаете это дополнительное пространство с помощью grid.setPadding(new Insets(20, 150, 10, 10));.Это 150 является правильным дополнением.См. Документацию по вкладышам .

.
0 голосов
/ 31 января 2019

Вы пробовали метод setExpandableContent() на панели диалога?Вы можете передать любой узел, который вам нравится, и тогда он сможет изменить размер, чтобы соответствовать всему предупреждению.

Пример установки GridPane в качестве содержимого оповещения.

GridPane() grid = new GridPane();
Alert alert = new Alert(AlertType.INFORMATION);
alert.getDialogPane().setExpandableContent(grid);
...