JavaFX GridPane行索引异常:添加按钮出现间隔问题求助
解决GridPane按钮行间隔异常的问题
你的问题主要出在GridPane的几个配置细节上,我来帮你梳理清楚并给出解决方案:
首先,你设置的setVgap(64)会直接在每一行之间添加64像素的固定间距——如果这不是你想要的大间隔,这就是第一个需要调整的点。但更关键的问题是,你的GridPane设置了固定的prefHeight(720),同时没有给行添加高度约束,默认情况下GridPane会把容器内的剩余空间自动分配给所有行,导致行本身被拉长,看起来按钮之间的间隔变得异常大。
这里有几个可行的解决方案,你可以根据自己的需求选择:
调整或移除Vgap设置:如果不需要这么大的行间距,把
setVgap(64)改成更小的值(比如setVgap(8)),或者直接删掉这行代码,让行间距默认由内容决定。添加行约束固定行高:给每一行设置固定的高度,避免GridPane随意拉伸行。修改你的
ButtonPanel构造方法,添加行约束:public ButtonPanel(Node parent) { ButtonPanel.setFillHeight(parent, true); this.setPrefSize(264,720); this.setPadding(new Insets(8)); // 替换或调整原有的Vgap值 this.setVgap(8); setGridLinesVisible(true); this.setStyle("-fx-background-color: #F1F5F8; -fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.5), 10, 0, 0, 0);"); // 添加行约束,设置每行的固定高度(可根据按钮大小调整) RowConstraints rowConstraint = new RowConstraints(); rowConstraint.setPrefHeight(32); // 给需要的行添加约束,这里示例添加两行 this.getRowConstraints().addAll(rowConstraint, rowConstraint); }取消固定的prefHeight:如果你的GridPane不需要固定720的高度,把
this.setPrefSize(264,720);改成this.setPrefWidth(264);,让GridPane根据按钮和间距自动适应高度,这样就不会有多余空间被分配给行导致间隔异常。
另外,你代码里的ButtonPanel.setFillHeight(parent, true);会让父节点填充高度,可能也会导致GridPane被拉伸占满父容器,如果你不需要这个效果,可以把参数改成false或者去掉这行代码。
内容的提问来源于stack exchange,提问作者Rando Hinn
相关产品推荐
相关产品推荐

