#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. Мне кажется, это хорошая попытка, но «ИНОГДА» не изменило результата. Хотя спасибо за предложение.