没看到以前用的tree组件,
Vaadin 有个tree add-on,如果你不嫌弃的话:
build.gradle
:
repositories {
...
maven {
url='https://maven.vaadin.com/vaadin-addons'
}
}
dependencies {
...
implementation 'org.vaadin.tatu:tree:3.1.0'
}
view XML:
<vbox id="treeBox" height="100%" width="30%"/>
TreeNode class:
@JmixEntity(name = "jm2_TreeNode")
public class TreeNode {
@JmixGeneratedValue
@JmixId
private UUID id;
private TreeNode parent;
@InstanceName
private String name;
private Set<TreeNode> childrenNodes = new HashSet<>();
public Set<TreeNode> getChildrenNodes() {
return childrenNodes;
}
public void setChildrenNodes(Set<TreeNode> childrenNodes) {
this.childrenNodes = childrenNodes;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public TreeNode getParent() {
return parent;
}
public void setParent(TreeNode parent) {
this.parent = parent;
if(parent != null){
parent.addChild(this);
}
}
public void addChild(TreeNode child){
this.childrenNodes.add(child);
}
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
}
controller class:
private void createTree() {
var tree = new Tree<>(TreeNode::getId);
var root1 = dataManager.create(TreeNode.class);
root1.setName("Root 1");
var root2 = dataManager.create(TreeNode.class);
root2.setName("Root 2");
var child1 = dataManager.create(TreeNode.class);
child1.setName("Child 1");
child1.setParent(root1);
var child2 = dataManager.create(TreeNode.class);
child2.setName("Child 2");
child2.setParent(root1);
var child3 = dataManager.create(TreeNode.class);
child3.setName("Child 3");
child3.setParent(root2);
tree.setItems(List.of(root1, root2), TreeNode::getChildrenNodes);
tree.setItemIconProvider(item ->
item.getName().contains("Root")? VaadinIcon.HOME:VaadinIcon.BELL
);
tree.setItemCaptionProvider(TreeNode::getName);
tree.addExpandListener(event -> System.out.println(event.getItems().size() + " nodes expanded."));
tree.addCollapseListener(event -> System.out.println(event.getItems().size() + " nodes collapsed."));
tree.asSingleSelect().addValueChangeListener(event -> {
if (event.getValue() != null)
System.out.println(event.getValue().getName() + " selected");
});
tree.setHeightFull();
tree.setWidthFull();
treeBox.add(tree);
}
结果:
好的,感谢