JavaFX:BorderPane 的布局问题 - 错误还是用户错误?

标签 javafx javafx-11

我在 BorderPane(的中心)内遇到 FlowPane 的奇怪行为。 Example
如果我放大或缩小窗口的宽度,一切都很好。导致这种效果的只是一个狭窄的宽度 +- 5 个像素。重现代码:

public class LayoutBugTest extends Application {

    public static void main(String[] args) {
        launch(args);
    }
    
    public void start(Stage stage) {
        TextField tf1 = new TextField("");
        TextField tf2 = new TextField("");
        TextField tf3 = new TextField("");
        tf1.setPrefColumnCount(20);
        tf2.setPrefColumnCount(10);
        tf3.setPrefColumnCount(10);     
        FlowPane flow = new FlowPane(10,10, tf1,tf2,tf3);
        
        BorderPane box = new BorderPane();
        box.setTop(new Label("Heading"));
        box.setCenter(flow);
        box.setStyle("-fx-border-width: 2px; -fx-border-color: black; -fx-border-radius: 1em; -fx-padding: 5px;");
        
        VBox anyLayout = new VBox(5, new Label("Before"), box, new Label("After"));
        
        Scene scene = new Scene(anyLayout);
        stage.setScene(scene);
        stage.show();
    }

}
我错过了什么还是这是一个布局错误?

最佳答案

这似乎是一个奇怪的错误。我添加了一些调试信息。

scene.widthProperty().addListener(evt ->{
        System.out.println( "box: " + box.prefHeight(anyLayout.getWidth()) + ", " + box.minHeight(anyLayout.getWidth()) + ", " + box.getHeight() );
        System.out.println( "flow: " + flow.prefHeight(box.getWidth()) + ", " + flow.minHeight(box.getWidth()) + ", " + flow.getHeight());

    });
程序启动时。两个字段窄字段并排,首选大小为:

box: 95.0, 95.0, 95.0
flow: 64.0, 64.0, 64.0


当我们减小窗口的宽度时,FlowPane 会切换方向,但它的最小和首选大小不会改变。

box: 95.0, 95.0, 95.0
flow: 64.0, 64.0, 101.0


当我们进一步减少并且布局再次看起来不错时。

box: 132.0, 132.0, 132.0
flow: 101.0, 101.0, 101.0


因此,看起来 BorderPane 正在使用 FlowPane 的正确宽度来“布局”,但是在请求首选高度时它使用了不正确的宽度。例如
flow.prefHeight(box.getWidth() - 14);
那首长高度遵循 FlowLayout 的实际高度。 14 从填充和边框。

关于JavaFX:BorderPane 的布局问题 - 错误还是用户错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66528426/

相关文章:

java - 当用户尝试在 JavaFx 中使用 setOnCloseRequest 关闭应用程序时的警报框

java - Install4j-如何获取安装程序的版本?

JavaFX 11 : IllegalAccessError when creating Label

intellij-idea - 在IDEA中将SceneBuilder与JavaFX 11结合使用

java - Maven 和 Eclipse 之间启动 JavaFX 11 应用程序的不同行为

java - 如何在 javafx 中获取字体系列和字体样式?

java - Mac eclipse JavaFX 没有创建css或fxml文件的选项?

javafx-2 - JavaFX 8 中的日期选择器

java - 将JavaFX应用程序(.Jar)转换为Windows应用程序(.exe)

java - 错误 : JavaFX runtime components are missing - JavaFX 11 and OpenJDK 11 and Eclipse IDE