我制作一个高度为40像素的自定义树状单元格。
这里的问题是公开三角形没有垂直对齐。
这里是树状单元的代码:
public static class TestObjectCell extends AnchorPane implements ISMPBVisualComponentWithData<TestObject>{
public Label label;
public TestObjectCell(){
label=new Label("label");
AnchorPane.setTopAnchor(label, 10.0);
this.getChildren().setAll(label);
this.setMinHeight(40);
this.setPrefHeight(40);
this.setMaxHeight(40);
}
@Override
public void setComponentData(TestObject object) {
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
正如你可以看到顶部对齐的图片显示三角形,如何将他的垂直中心对齐?
答案 0 :(得分:1)
我遇到了同样的问题。我使用单元工厂来翻译TreeCell的公开节点:
myTree.setCellFactory(treeView -> {
final TreeCell<Label> cell = new TreeCell<Label>() {
@Override public void updateItem(Label item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setGraphic(null);
} else {
final Node graphic = (getTreeItem() == null) ? null : getTreeItem().getGraphic();
setGraphic((graphic != null) ? graphic : (item != null) ? item.getGraphic() : null);
}
setText((empty || item == null) ? null : item.getText());
}
};
cell.disclosureNodeProperty().addListener((obs, oldNode, newNode) -> {
final StackPane pane = (StackPane) newNode;
newNode.translateYProperty().bind(cell.heightProperty().multiply(0.5).subtract(pane.heightProperty()));
});
return cell;
});
当然必须有更好的方法来做到这一点,但至少这对我有用。
答案 1 :(得分:0)
您是否尝试过设置alignment property inside TreeCell?
答案 2 :(得分:0)
我发现更改公开节点对齐方式的唯一方法是使用-fx-padding
样式手动覆盖垂直填充:
.tree-disclosure-node {
-fx-padding: 0.85em 0.229em 0.333333em 0.229em;
}
这将允许您根据需要使箭头居中,但如果行高度发生变化,则需要修改此值。