swing JTree
基础
树图形就像文件目录。由TreeNode表示节点,用TreePath表示这个节点的路径。
创建时,先创建根节点,然后创建子节点连接,类似于树的链式表示。
TreeNode 是一个接口,创建节点对象时,通常使用已实现该接口的的 DefaultMutableTreeNode 类。
DefaultMutableTreeNode
表示一个节点,可以进行增查改删等操作。
构造方法:
- DefaultMutableTreeNode(Object userObject, boolean allowsChildren):userObject是用户对象(节点名称),allowsChildren是是否允许拥有子节点
方法:
- add(): 添加子节点
- insert(MutableTreeNode newChild, int childIndex) : 在指定位置插入子节点
- getPreviousSibling(): 获得这个节点的前一个兄弟节点
- getNextSibling()
- getFirstChild()
- remove(int childIndex): 移除子节点
- remove(MutableTreeNode aChild);
- removeAll()
- getChildCount():获得子节点数量
- getLeafCount(): 获得叶子结点数量
- TreeNode getChildAt(int index): 获取指定位置子节点
- TreeNode getChildAfter(TreeNode aChild): 获取子节点之后子节点
- TreeNode getChildBefore(TreeNode aChild)
- boolean isNodeChild(TreeNode aNode): 判断是否是aNode是否是这个节点子节点
- TreeNode getParent(): 获得父节点,没有返回null
- boolean isRoot(): 是否是根节点
- boolean isLeaf()
- int getLevel(): 返回这个节点的层数,如果是根节点就是0
- TreeNode[] getPath(): 返回从根结点到这个节点的路径,第一个节点是根节点
- Enumeration children(): 遍历子节点(不包括孙子节点)
- Enumeration breadthFirstEnumeration(): 遍历树(广度遍历)
- Enumeration depthFirstEnumeration(): 深度遍历
- setUserObject(Object userObject)
- Object getUserObject(): 获得节点名称
TreePath
一般使用方法:TreeNode[] pathNodes = node.getPath();
TreePath treePath = new TreePath(pathNodes);
- treePath.getPathCount(): 获得节点数量
- treePath.getPath(): 获得路径上的节点
- treePath.getParentPath(): 获得这个节点上一个节点路径
- treePath.isDescendant(TreePath aTreePath): 判断aTreePath是否包含这个路径(判断aTreePath节点是否是子孙辈节点)
JTree
JTree负责把构造好的树显示出来。
构造方法:
- JTree(TreeNode root): 由根节点就可以显示整个树
- TreeModel treeModel = new DefaultTreeModel(TreeNode root):构建一个树模型. 然后JTree(treeModel)
方法:
- TreePath getPathForRow(int row): 获得行索引。但是这个行索引实惠变化的,它不包括没有展开的。
- int getRowForPath(TreePath path): 根据路径获得行索引
- int getRowForLocation(int x, int y): 获得这个位置处的节点,可以和鼠标监听器一起使用。
- TreePath getPathForLocation(int x, int y)
- expandRow(int row): 展开节点
- expandPath(TreePath path)
- collapseRow(int row): 折叠节点
- collapsePath(TreePath path)
- isExpanded(int row): 节点是否处于展开状态
- isExpanded(TreePath path)
- setSelectionRow(int row): 设置当前选中的节点
- setSelectionRow(int[] row)
- setSelectionPath(TreePath path)
- setSelectionPath(TreePath[] path): 多选
- int[] getSelectionRows(): 获取当前选中的节点
- TreePath getSelectionPath()
- TreePath[] getSelectionPaths()
- setRootVisible(boolean rootVisible): 是否显示根节点(默认显示)
- setShowsRootHandles(boolean newValue): 是否显示根节点句柄(默认不显示)
- setEditable(boolean flag)
设置节点样式:
首先创建节点渲染器DefaultTreeCellRenderer render = new DefaultTreeCellRenderer()
- render.setOpenIcon(Icon newIcon): 设置节点展开时图标
- render.setClosedIcon(Icon newIcon):
- render.setLeafIcon(Icon newIcon): 叶子节点显示图标
- render.setFont(Font font)
- ender.setTextSelectionColor(Color newColor):选中时颜色
- render.setTextNonSelectionColor(Color newColor)
- render.setBackgroundSelectionColor(Color newColor): 选中时背景颜色
- render.setBackgroundNonSelectionColor(Color newColor)
之后设置节点渲染器jTree.setCellRenderer(render)
监听器:
- addTreeExpansionListener: 节点展开/折叠监听器
- addTreeWillExpandListener: 功能和上面相同,但是先执行
- addTreeSelectionListener: 节点被选中监听器
- tree.getModel().addTreeModelListener: 节点增删改监听器
public class Tree |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment