我正在尝试创建一个TreeView
,其中每个TreeCell
代表程序中的一条语句。通过调用setGraphics
,我想用自定义的Node
替换默认单元格,如下图。
我正在使用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像素宽的Label
和VBox
,但是setPrefHeight
没有。如您所见,标头的高度远大于2个像素。
我的问题是如何正确设置Label
的高度?
答案 0 :(得分:2)
将prefHeight
(或maxHeight
)设置为小于计算的Label
的最小高度的值,仍会导致标签的最小高度被用作{ {1}}。此最小高度取决于字体大小。
Label
会降低计算出的最小高度。
由于似乎您没有尝试向这些节点添加任何文本,因此仅使用header.setFont(Font.font(2));
而不是Region
作为Label
的第一个和最后一个孩子