forked from FR-Global/plugin-event-manager
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
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); |
|
} |
|
|
|
}
|
|
|