You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
2.3 KiB

package com.fr.plugin.event.manager.ui.tree;
import com.fr.design.gui.itree.UITreeUI;
import com.fr.plugin.event.manager.data.MyTree;
import com.fr.plugin.event.manager.ui.EventConfigPane;
import javax.swing.BorderFactory;
import javax.swing.JTree;
import javax.swing.ToolTipManager;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import java.awt.Color;
import java.util.List;
/**
* 组件树
* @author Joe
* Created by Joe on 12/14/2020
*/
public class MyComponentTree extends JTree {
// 持有一个eventConfigPane对象,用来获取它的tree
private EventConfigPane eventConfigPane;
private static final int PADDING_LEFT = 5;
private static final int PADDING_TOP = 5;
public MyComponentTree(EventConfigPane eventConfigPane, boolean rootVisible) {
this.eventConfigPane = eventConfigPane;
setBackground(new Color(255, 255, 255));
// 根的可见性
setRootVisible(rootVisible);
setCellRenderer(new MyComponentCellRenderer());
getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
// 注册tooltip
ToolTipManager.sharedInstance().registerComponent(this);
initListener();
refreshTree();
setUI(new UITreeUI());
setBorder(BorderFactory.createEmptyBorder(PADDING_TOP, PADDING_LEFT, 0, 0));
}
/**
* 增加树节点选择的监听
*/
private void initListener() {
this.addTreeSelectionListener(eventConfigPane);
}
/**
* 刷新组件树
*/
public void refreshTree() {
MyComponentTreeModel model = new MyComponentTreeModel(eventConfigPane.getTree());
setModel(model);
expandTree();
repaint();
}
/**
* 最多展开一层
*/
private void expandTree() {
MyTree root = (MyTree) this.getModel().getRoot();
expandTree(new TreePath(root), 1);
}
private void expandTree(TreePath path, int layer) {
MyTree node = (MyTree) path.getLastPathComponent();
// Go to leaf
if (node.getChildrenSize() > 0 && layer > 0) {
List<MyTree> children = node.getChildren();
for (MyTree n : children) {
TreePath newPath = path.pathByAddingChild(n);
expandTree(newPath, --layer);
}
}
expandPath(path);
}
}