JavaFX setPrefWrapLength()方法

JavaFX setPrefWrapLength()方法,java,javafx,Java,Javafx,在下面的代码中,将值50或300传递给函数并不重要。除非我调整窗口的大小,否则我所有的按钮总是排成一行。根据理论,当我的节点行达到50像素(假设我将该值传递给setPrefWrapLength()方法)后,我的下一个节点应该在下一行。但事实并非如此。有人能解释一下为什么吗 package test2; import com.sun.java.swing.plaf.gtk.GTKConstants; import javafx.application.Application; import st

在下面的代码中,将值50或300传递给函数并不重要。除非我调整窗口的大小,否则我所有的按钮总是排成一行。根据理论,当我的节点行达到50像素(假设我将该值传递给setPrefWrapLength()方法)后,我的下一个节点应该在下一行。但事实并非如此。有人能解释一下为什么吗

package test2;

import com.sun.java.swing.plaf.gtk.GTKConstants;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Orientation;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Test2 extends Application {

    @Override
    public void start(Stage primaryStage) {
        Button btn1 = new Button("one");
        Button btn2 = new Button("two");
        Button btn3 = new Button("three");
        Button btn4 = new Button("four");

        FlowPane fpane = new FlowPane(Orientation.HORIZONTAL, 10, 10, btn1, btn2, btn3, btn4);
        fpane.setPrefWrapLength(50);

        Scene scene = new Scene(fpane, 300, 250);

        primaryStage.setTitle("Flow Pane");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

}
更新: 我在javaFX文档中发现了下面这一行,我认为这与这个问题有关

请注意,prefWrapLength仅用于计算首选尺寸,可能不会反映跟踪flowpane实际尺寸的实际包装尺寸


它只是一个首选值,可以在布局过程中被覆盖。我相信这取决于流窗格本身的大小,因为按照设计,在新的流窗格开始之前必须填充一行。如果您的flowpane宽度为300,则它不会在50开始新的一行。我建议您覆盖区域以实现更自定义的实现。那么,您是否建议我将场景缩小?将场景缩小会起作用,但如果您想要调整窗口大小,则硬编码宽度以获得所需效果不是一种好的做法。我倾向于不使用任何提供的布局,总是创建我自己的Region自定义子类(参见文档),这一直都是有效的。但是,这将首先挫败拥有此类功能的目的。假设我只希望我的按钮从左边到某个宽度,然后我想添加其他内容。我认为这是为了解决这类问题而创建的(p,s,我只想使用FlowPane),我知道这似乎违反直觉,但根据我的经验,它始终是更好的选择。我不同意,我不认为flowpane是专为这一点设计的,如果你能做到这一点,我会留下深刻的印象。我不知道你到底想要什么样的布局,但听起来你需要在里面嵌套布局,比如HBox。