如何让JavaFX的HBox不受内容限制自由调整大小?
JavaFX HBox 自由缩小问题解决方案
思路一:让HBox忽略子控件的布局约束
HBox默认会根据子节点的最小尺寸限制自身的最小宽高,导致无法缩小到容纳不下子节点的尺寸。只需强制设置HBox的最小宽高为0,就能让它无视子节点大小自由伸缩:
HBox hBox = new HBox(); hBox.setBackground(new Background(new BackgroundFill(Color.BLUE,null,null))); // 添加这两行强制设置最小尺寸 hBox.setMinWidth(0); hBox.setMinHeight(0); BorderPane.setMargin(hBox,new Insets(20,20,20,20)); root.setCenter(hBox);
调整窗口时,HBox会跟随Stage自由缩小,你之前编写的HBox尺寸监听器也能在任何尺寸下正常生效。
思路二:让Rectangle自动适配HBox大小(无需手动监听器)
通过属性绑定让Rectangle的尺寸自动跟随HBox变化,同时配合HBox的最小尺寸设置,实现完全自动适配:
HBox hBox = new HBox(); hBox.setBackground(new Background(new BackgroundFill(Color.BLUE,null,null))); hBox.setMinWidth(0); hBox.setMinHeight(0); BorderPane.setMargin(hBox,new Insets(20,20,20,20)); root.setCenter(hBox); // 初始化无固定尺寸的Rectangle Rectangle rectangle = new Rectangle(); Rectangle rectangle2 = new Rectangle(); HBox.setMargin(rectangle,new Insets(20,20,20,20)); HBox.setMargin(rectangle2,new Insets(20,20,20,20)); // 绑定宽度:扣除左右margin和控件间距后平分给两个Rectangle rectangle.widthProperty().bind(hBox.widthProperty().subtract(60).divide(2)); rectangle2.widthProperty().bind(hBox.widthProperty().subtract(60).divide(2)); // 绑定高度:扣除上下margin rectangle.heightProperty().bind(hBox.heightProperty().subtract(40)); rectangle2.heightProperty().bind(hBox.heightProperty().subtract(40)); hBox.getChildren().addAll(rectangle, rectangle2);
这种方式不需要手动编写监听器,Rectangle会自动适配HBox的大小,同时HBox依然能自由缩小到任意尺寸。
内容的提问来源于stack exchange,提问作者user7974170
相关产品推荐
相关产品推荐

