
我正试图创建一张发票,我以后可以打印。我用VBoxes和GridPanes来做这件事。中间GridPane中的列数是可变的。我在用循环来建造它。为了使GridPane (绿色边框)跨越整个VBox (红色边框),我尝试了许多不同的方法,但似乎没有什么效果。
在给出边界之后,我意识到网格实际上跨越了整个VBoxes,但是列并没有占据整个空间。我不能给列约束,因为我不知道中间网格的列数,我必须保持在500 to以下。
下面是相关代码。
final int width = 500;
BorderPane borderpane = new BorderPane();
VBox vboxTop = vboxForPrinting('l');
VBox vboxMiddle = vboxForPrinting('r');
VBox vboxBottom = vboxForPrinting('r');
GridPane gridpaneTop = new GridPane();
GridPane gridpaneMiddle = new GridPane();
GridPane gridpaneBottom = new GridPane();
borderpane.setPrefWidth(width);
vboxTop.setFillWidth(true);
vboxMiddle.setFillWidth(true);
vboxBottom.setFillWidth(true);
// Some code
vboxTop.getChildren().add(gridpaneTop);
vboxMiddle.getChildren().add(gridpaneMiddle);
vboxBottom.getChildren().add(gridpaneBottom);
borderpane.setTop(vboxTop);
borderpane.setCenter(vboxMiddle);
borderpane.setBottom(vboxBottom);函数vboxForPrinting()如下所示:
public VBox vboxForPrinting(char align) {
VBox vbox = new VBox();
switch (align) {
case 'r':
case 'R':
vbox.setAlignment(Pos.CENTER_RIGHT);
break;
case 'l':
case 'L':
vbox.setAlignment(Pos.CENTER_LEFT);
break;
default:
vbox.setAlignment(Pos.CENTER);
}
vbox.setPadding(new Insets(5));
vbox.setSpacing(5);
vbox.setFillWidth(true);
return vbox;
}发布于 2015-07-27 09:05:47
您可以为网格窗格的特定子窗格应用setHgrow(),该子窗格将使实习生增长并占用剩余的可用空间。
来自javadocs:
设置由网格窗格包含的子区域的水平增长优先级。如果设置了,网格窗格将使用优先级分配额外的水平空间,如果网格窗格的大小大于其首选宽度。将值设置为null将删除约束。
GridPane.setHgrow(name, Priority.ALWAYS);其中,name是一个标签,您想要生长和占据其余的空地方。
如果希望所有字段或列都增长,则可以将其应用于所有字段或列,也可以创建一个ColumnConstraints并将其应用于一个/多个列。
下列守则应能发挥作用:
ColumnConstraints columnConstraints = new ColumnConstraints();
columnConstraints.setFillWidth(true);
columnConstraints.setHgrow(Priority.ALWAYS);
gridPane.getColumnConstraints().add(columnConstraints);来关心你,
我不能给列约束,因为我不知道中间网格的列数,我必须保持在500 to以下。
您不需要跟踪列的数量,只有当有额外的可用空间时,hgrow才允许子程序增长。
https://stackoverflow.com/questions/31647593
复制相似问题