📄 treeiterator.java
字号:
package com.socialite.bizlogic.tree;
import java.util.Iterator;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.MutableTreeNode;
import javax.swing.tree.TreeNode;
/**JDK没有提供JTree的迭代器,所以我实现了DefaultTreeModel的迭代器
* @author 余志昌
*/
public class TreeIterator implements Iterator {
DefaultTreeModel dtm;
TreeNode curNode;
boolean started;
public TreeIterator(DefaultTreeModel dtm) {
this.dtm= dtm;
}
/**
* 设置当前位置
* @param current 空表示从树根开始(含),否则从current开始(不含)
*/
public void setCurrentPos(TreeNode current){
if(current==null)
started=false;
else{
started=true;
curNode=current;
}
}
public void remove() {
// TODO Auto-generated method stub
dtm.removeNodeFromParent((MutableTreeNode)curNode);
}
public boolean hasNext() {
// TODO Auto-generated method stub
TreeNode current=curNode;
if(!started){
current= (TreeNode)dtm.getRoot();
if(current==null)
return false;
else
return true;
}
current=curNode;
if (current.getChildCount() > 0) {
return true;
} else {//寻找current的兄弟
TreeNode parent= current.getParent();
while (parent!=null) {
int count= parent.getChildCount();
int index= parent.getIndex(current);
if (index < count - 1)
return true;
current=parent;
parent=parent.getParent();
}
return false;
}
}
public Object nextNode() {
// TODO Auto-generated method stub
if(!started){
started=true;
curNode= (TreeNode)dtm.getRoot();
return curNode;
}
if (curNode.getChildCount() > 0) {
curNode= curNode.getChildAt(0);
return curNode;
} else {//寻找curNode的兄弟
TreeNode parent= curNode.getParent();
while (parent!=null) {
int count= parent.getChildCount();
int index= parent.getIndex(curNode);
if (index < count - 1) {
curNode= parent.getChildAt(index+1);
return curNode;
}
curNode=parent;
parent=parent.getParent();
}
return null;
}
}
/**
* 单元测试。树结构:
* root\
* node1\
* node11
* node12
* node2
* node3\
* node31
* node32
* node33
* 期望输出:
* -root-node1-node11-node12-node2-node3-node31-node32-node33
* @param args 无意义
*/
public static void main(String[] args){
DefaultMutableTreeNode root=new DefaultMutableTreeNode("root");
DefaultMutableTreeNode node1=new DefaultMutableTreeNode("node1");
DefaultMutableTreeNode node11=new DefaultMutableTreeNode("node11");
DefaultMutableTreeNode node12=new DefaultMutableTreeNode("node12");
DefaultMutableTreeNode node2=new DefaultMutableTreeNode("node2");
DefaultMutableTreeNode node21=new DefaultMutableTreeNode("node21");
DefaultMutableTreeNode node22=new DefaultMutableTreeNode("node22");
DefaultMutableTreeNode node23=new DefaultMutableTreeNode("node23");
root.add(node1);
node1.add(node11);
node1.add(node12);
root.add(node2);
node2.add(node21);
node2.add(node22);
node2.add(node23);
JTree tree=new JTree(root);
DefaultTreeModel dtm=(DefaultTreeModel)tree.getModel();
Iterator it=new TreeIterator(dtm);
while(it.hasNext()){
System.out.print("-"+it.nextNode());
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -