JavaFX:如何让子AnchorPane匹配父HBox大小(类似Android的match_parent)
让AnchorPane填满父HBox的解决方案
嘿,我完全懂你想要的效果——就像Android里的match_parent那样,让子AnchorPane不管父HBox怎么调整尺寸,都能自动填满整个空间对吧?在JavaFX里实现这个其实没那么复杂,核心就是给AnchorPane设置正确的布局约束,毕竟HBox默认不会自动让子节点撑满它的可用空间。
我给你两种常用的实现方式,看你是用FXML还是纯代码开发:
方式一:FXML布局配置
如果是用FXML写界面,直接给AnchorPane加上几个HBox专属的布局属性就行:
<HBox xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml"> <!-- 关键就是这几个属性 --> <AnchorPane HBox.hgrow="ALWAYS" HBox.vgrow="ALWAYS" maxWidth="INFINITY" maxHeight="INFINITY"> <!-- 在这里添加AnchorPane的子控件 --> </AnchorPane> </HBox>
我给你解释下每个属性的作用:
HBox.hgrow="ALWAYS":告诉HBox,当水平方向有多余空间时,把所有额外空间都分配给这个AnchorPaneHBox.vgrow="ALWAYS":垂直方向同理,让AnchorPane能撑满HBox的垂直空间maxWidth="INFINITY"和maxHeight="INFINITY":默认情况下AnchorPane的最大宽高是它的默认偏好尺寸,设置成无限大才能让它跟着父容器放大
方式二:纯Java代码实现
如果是用代码动态创建布局,就调用HBox的静态方法来设置约束:
// 创建父容器HBox HBox parentHBox = new HBox(); // 创建子容器AnchorPane AnchorPane childAnchorPane = new AnchorPane(); // 设置水平和垂直方向的增长优先级,ALWAYS表示优先分配空间 HBox.setHgrow(childAnchorPane, Priority.ALWAYS); HBox.setVgrow(childAnchorPane, Priority.ALWAYS); // 允许AnchorPane扩展到父容器允许的最大尺寸 childAnchorPane.setMaxWidth(Double.MAX_VALUE); childAnchorPane.setMaxHeight(Double.MAX_VALUE); // 将AnchorPane添加到HBox中 parentHBox.getChildren().add(childAnchorPane);
另外要提一句:如果你的AnchorPane里面还有子控件,记得给那些子控件也设置Anchor约束(比如AnchorPane.setTopAnchor(subNode, 0.0)、AnchorPane.setBottomAnchor(subNode, 0.0)),这样子控件也能跟着AnchorPane一起拉伸,不然它们可能会保持原来的大小,达不到你想要的整体适配效果。
内容的提问来源于stack exchange,提问作者Houari Zegai
相关产品推荐
相关产品推荐

