Api 1.6 JTree
1. Summary:
树中特定的节点可以由 TreePath(封装节点及其所有祖先的对象)标识,
或由其显示行(其中显示区域中的每一行都显示一个节点)标识。
展开 节点是一个非叶节点(由返回 false 的 TreeModel.isLeaf(node) 标识),
当展开 其所有祖先时,该节点将显示其子节点。
折叠 节点是隐藏它们的节点。
隐藏 节点是位于折叠祖先下面的节点。
所有可查看 节点的父节点都是可以展开的,但是可以显示它们,也可以不显示它们。
显示 节点是可查看的并且位于可以看到它的显示区域。
2. Lisener:
请实现 TreeSelectionListener 接口,并使用方法 addTreeSelectionListener 添加实例。当选择更改时,将调用 valueChanged,即如果用户在同一节点上单击两次,则仅调用 valueChanged 一次。
3. Constructor Summary
我们常常使用Object[],作为参数传入。为每一个类创建一个TreeNode,但是往往来说,我们知道的是rootNode,我们希望做的是.add()
private void leftIniti() {
Border border1=BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"源文件");
left.setBorder(border1);
treeRoot =new DefaultMutableTreeNode(this.getClass().getName());
final JTree tree = new JTree(treeRoot);// to do create jtree
addLisence(tree);
JScrollPane jsp = new JScrollPane(tree);//add scroll
left.setLayout(new BorderLayout());
left.add(jsp,BorderLayout.CENTER);
}
4. FileFilter in JTree
new Filter
public class MyFilter implements FileFilter {
private String suffix;
public MyFilter() {
super();
// TODO Auto-generated constructor stub
}
public MyFilter(String suffix) {
super();
this.suffix = suffix;
}
@Override
public boolean accept(File pathname) {
// 目录或者后缀相同 且 不是隐藏文件
return (pathname.isDirectory()||pathname.getName().endsWith(suffix))&&(!pathname.isHidden());
}
}
4. Using filter traverse in file and add node
private void readDict(File path, DefaultMutableTreeNode dict) {
MyFilter filter = new MyFilter(".java");
File list[] = path.listFiles(filter);
if (list == null)
return;
for (int i = 0; i < list.length; i++) {
File file_inlist = list[i];
// String filename = file_inlist.getName();
if (file_inlist.isDirectory()) {
DefaultMutableTreeNode parent;
parent = new DefaultMutableTreeNode(new MyFile(file_inlist));
// 添加空白文件夹节点 使子节点显示为文件夹
File stubadd = null;
DefaultMutableTreeNode stub = new DefaultMutableTreeNode(
stubadd);
parent.add(stub);
dict.add(parent);
} else {
DefaultMutableTreeNode son = new DefaultMutableTreeNode(
new MyFile(file_inlist));
dict.add(son);
}
}
}