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 children = node.getChildren(); for (MyTree n : children) { TreePath newPath = path.pathByAddingChild(n); expandTree(newPath, --layer); } } expandPath(path); } }