JavaFX ColumnConstraint Минимальная ширина игнорируется, используется предварительная ширина при изменении размера окна

#javafx #fxml

Вопрос:

Я ошибаюсь, думая, что при изменении размера окна для приложения на основе JavaFX вместо предпочтительного размера следует использовать настроенный минимальный размер для ограничения ширины столбца?

Программа довольно проста, из книги: JavaFX 9 На примере, с некоторыми незначительными изменениями для работы в Eclipse с JavaFX 15.

Сначала картинка, показывающая желаемый результат. Я установил значение fxml ColumnConstraints prefWidth равным 50, что совпадает с минимальной шириной.

ограничение столбца с желаемым поведением

Теперь то же самое приложение запускается с одним изменением: ширина префикса установлена на 150 вместо 50. При уменьшении размера горизонтального окна с помощью мыши вы можете видеть, что приложение не использует настройку минимальной ширины (минимальная ширина не была изменена). Я не уменьшил горизонталь до минимума, чтобы сделать более визуально очевидным, что содержимое обрезается.

неожиданное поведение ограничения столбца

Ниже приведены два дополнительных класса в этом проекте (я пропускаю отображение информации о модуле). Но я не думаю, что здесь есть что-то, что влияет на суть вопроса.

 package com.jfxbe;

import java.io.IOException;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class FXMLContactFormX extends Application {
     
    /**                      
     * @param args the command line arguments                      
     */                      
    public static void main(String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(Stage stage) {
        stage.setTitle("FXMLContactForm ");

        Parent root = null;
        try {
            root = FXMLLoader.load(getClass().getResource("ContactFormX.fxml"));
        } catch (IOException e) {
            e.printStackTrace();
        }

        Scene scene = new Scene(root, 380, 150, Color.WHITE);
        stage.setScene(scene);
        stage.setMinWidth(200);
        stage.setMinHeight(150);

        stage.show();
    }
}

package com.jfxbe;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;

public class ContactFormXController {
       @FXML private TextField firstNameField;
       @FXML private TextField lastNameField;
       @FXML private Button saveButton;
       
       @FXML 
       protected void saveContactAction(ActionEvent event) {
           System.out.println("Saving the following information: ");
           System.out.println("First Name: "   firstNameField.getText());
           System.out.println(" Last Name: "   lastNameField.getText());
           }
}
 

Я что-то упускаю в том, как работают ограничения столбцов? Есть ли документация, которая объясняет, что происходит с игнорированием минимальной ширины или нет?

Комментарии:

1. Просто быстрое предположение: поскольку у вас есть hgrow="ALWAYS" , столбец вынужден использовать, по крайней мере, его предпочтительную ширину. Попробуйте установить его на SOMETIMES .

2. Мне кажется, это хорошая попытка, но «ИНОГДА» не изменило результата. Хотя спасибо за предложение.