JavaFX NumberBinding取整及标签与GridPane尺寸绑定求助
嘿,我来帮你搞定这两个JavaFX的问题!咱们一步步来:
1. 给NumberBinding做取整处理
你的cellSize是基于场景宽高计算出来的浮点型绑定,要转成整数的话,JavaFX的Bindings类提供了几种实用的取整方法,根据你的需求选就行:
- 四舍五入到整数:用
Bindings.round(),返回IntegerBinding类型,适合需要标准取整的场景 - 向下取整(只取整数部分):用
Bindings.floor(),返回DoubleBinding,之后可以用.integerValue()转成整数绑定 - 向上取整:用
Bindings.ceil(),同样可转成整数绑定
举个四舍五入的修改示例,直接替换你的cellSize定义:
// 四舍五入取整的IntegerBinding IntegerBinding cellSize = Bindings.round( Bindings.min( scene.widthProperty().subtract(150).divide(nbC.getValue()), scene.heightProperty().subtract(150).divide(nbR.getValue()) ) ).integerValue();
如果还是需要保留NumberBinding类型,去掉.integerValue()就行,不过绑定到组件尺寸属性时,JavaFX会自动处理类型转换。
2. 让标签与GridPane宽高保持一致并放入StackPane
StackPane本身会让子节点居中,但要让标签完全贴合GridPane的大小,你需要把标签的尺寸属性绑定到GridPane的尺寸属性,这样GridPane大小变化时,标签会自动跟着调整:
假设你已经有了GridPane gPane和Label cellLabel,可以这么写:
// 绑定标签的首选宽高到GridPane的实时宽高 cellLabel.prefWidthProperty().bind(gPane.widthProperty()); cellLabel.prefHeightProperty().bind(gPane.heightProperty()); // 可选:设置标签的最大宽高为无穷大,确保不会因为内容限制而无法填充 cellLabel.setMaxWidth(Double.MAX_VALUE); cellLabel.setMaxHeight(Double.MAX_VALUE); // 把GridPane和标签一起放进StackPane,标签会覆盖在GridPane上方(顺序决定层级) StackPane stackPane = new StackPane(gPane, cellLabel);
如果你的GridPane尺寸是由cellSize绑定的(比如子面板的宽高绑定到cellSize),那么GridPane的尺寸会自动适配子节点,标签也会跟着cellSize的变化同步调整大小,完美满足你的需求。
内容的提问来源于stack exchange,提问作者Harkan
相关产品推荐
相关产品推荐

