首页 > 解决方案 > 调整窗口大小时,JavaFX ColumnConstraint minWidth 被忽略,使用 preWidth

问题描述

我错误地认为在为基于 JavaFX 的应用程序调整窗口大小时,应该使用为列宽约束配置的最小大小而不是首选大小?

该程序非常简单,来自一本书:JavaFX 9 By Example,在 Eclipse 中使用 JavaFX 15 进行了一些小的更改。

首先是一张显示预期结果的图片。我已将 fxml ColumnConstraints prefWidth值设置为 50,这与minWidth相同。

具有所需行为的列约束

现在,启动同一个应用程序,只需进行一次更改:prefWidth设置为 150 而不是 50。当使用鼠标缩小水平窗口大小时,您可以看到应用程序没有使用minWidth设置(minWidth 没有更改)。我没有将水平线缩小到最小,以使内容被剪裁在视觉上更加明显。

列约束意外行为

以下是该项目中的两个附加类(我正在跳过显示模块信息)。但我认为这里没有任何东西会影响问题的要点。

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());
           }
}

我是否遗漏了列约束的工作方式?是否有文档解释了minWidth被忽略或不被忽略的情况?

标签: javafxfxml

解决方案


推荐阅读