如何为VBox的子级设置不同的高度

时间:2018-11-15 08:50:27

标签: java javafx

我正在尝试创建一个TreeView,其中每个TreeCell代表程序中的一条语句。通过调用setGraphics,我想用自定义的Node替换默认单元格,如下图。

enter image description here

我正在使用VBox,因为所有孩子都是垂直放置的。 Header Footer 是保留用于拖放操作的2个小区域。例如我可以通过将光标移到当前语句的标题上方来将其拖放到当前语句之前。

我想将Label用于页眉和页脚,并且希望将其高度限制为2个像素,所以我尝试了:

public VBox getTestContainer() {
    VBox vbox = new VBox();
    Label header = new Label();
    header.setPrefHeight(2);
    header.setPrefWidth(200);
    ... ... ...
    vbox.getChildren().add(header, ..., footer);
}

public void start(Stage stage) throws Exception {

    Group root = new Group();
    root.getChildren().add(getTestBlock());
    stage.setTitle("Test");
    stage.setScene(new Scene(root, 400, 300));
    stage.show();
}

为确保VBox不会被其他布局窗格调整大小,我只是将其放在Group中。

setPrefWidth有效,它给了我200像素宽的LabelVBox,但是setPrefHeight没有。如您所见,标头的高度远大于2个像素。

enter image description here

我的问题是如何正确设置Label的高度?

1 个答案:

答案 0 :(得分:2)

prefHeight(或maxHeight)设置为小于计算的Label的最小高度的值,仍会导致标签的最小高度被用作{ {1}}。此最小高度取决于字体大小。

Label

会降低计算出的最小高度。

由于似乎您没有尝试向这些节点添加任何文本,因此仅使用header.setFont(Font.font(2)); 而不是Region作为Label的第一个和最后一个孩子