<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="skins/JinnStyleV1/article.xslt"?><blog view="689812" processed="0.098" queries="8" focusMarkup="" xslt="skins/JinnStyleV1/article.xslt"><panels><panel id="1" sn="0" sys="true"><name>Blog Main</name><content><article id="139" disComm="false"><title>JTree使用经验总结</title><category id="20"><name>学习随笔</name><icon>images/icons/3.gif</icon></category><content><![CDATA[&#22312;&#23454;&#38469;&#24320;&#21457;&#36807;&#31243;&#20013;&#20250;&#32463;&#24120;&#20351;&#29992;JTree&#32452;&#20214;&#65292;&#24179;&#26102;&#20250;&#36935;&#21040;&#36825;&#26679;&#25110;&#37027;&#26679;&#30340;&#38382;&#39064;&#65292;&#22312;&#27492;&#23558;&#20598;&#24471;&#19968;&#28857;&#32463;&#39564;&#20889;&#19979;&#26469;&#65292;&#19982;&#22823;&#23478;&#20849;&#20139;&#65292;&#24076;&#26395;&#23545;&#22823;&#23478;&#26377;&#25152;&#24110;&#21161;&#12290;<br /><br /><textarea name='code' class='Java' cols='50'>
private JTree jtNetDevice;//&#25968;&#32452;&#20214;&#30003;&#26126;
private JScrollPane jspTree;//&#28378;&#21160;&#38754;&#26495;&#30003;&#26126;
</textarea><br /><textarea name='code' class='Java' cols='50'>
// &#21021;&#22987;&#21270;
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(&quot;root&quot;);
jtNetDevice = new JTree(rootNode);
jtNetDevice.setAutoscrolls(true);
getTreeSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SelectION);//&#35774;&#32622;&#21333;&#36873;&#27169;&#24335;
jspTree = new JScrollPane();
jspTree.getViewport().add(jtNetDevice, null);
</textarea><br /><textarea name='code' class='Java' cols='50'>
// &#19977;&#20010;&#32463;&#24120;&#20351;&#29992;&#30340;&#21462;&#20540;&#20989;&#25968;
private DefaultTreeModel getTreeModel(){
	return (DefaultTreeModel)jtNetDevice.getModel();
}
private DefaultMutableTreeNode getRootNode(){
	return (DefaultMutableTreeNode)getTreeModel().getRoot();
}
private TreeSelectionModel getTreeSelectionModel(){
	return jtNetDevice.getSelectionModel();
}
</textarea><br /><textarea name='code' class='Java' cols='50'>
// &#26681;&#25454;node&#24471;&#21040;path&#65306;
TreePath visiblePath = new TreePath(getTreeModel().getPathToRoot(node));
</textarea><br /><textarea name='code' class='Java' cols='50'>
// &#26681;&#25454;Path&#23637;&#24320;&#21040;&#35813;&#33410;&#28857;
jtNetDevice.makeVisible(visiblePath);
</textarea><br /><textarea name='code' class='Java' cols='50'>
// &#26681;&#25454;path&#35774;&#23450;&#35813;&#33410;&#28857;&#36873;&#23450;
jtNetDevice.setSelectionPath(visiblePath);
</textarea><br /><textarea name='code' class='Java' cols='50'>
// &#36873;&#20013;&#33410;&#28857;&#30340;&#26041;&#27861;

// &#39318;&#20808;&#65292;&#26681;&#25454;&#33410;&#28857;&#24471;&#21040;&#26641;&#36335;&#24452;&#65292;&#20854;&#20013;chosen&#20026;&#38656;&#35201;&#36873;&#20013;&#30340;&#33410;&#28857;
TreePath visiblePath = new TreePath(((DefaultTreeModel)jtNetDevice.getModel()).getPathToRoot(chosen));
// &#28982;&#21518;&#26681;&#25454;Path&#36873;&#20013;&#35813;&#33410;&#28857;
jtNetDevice.setSelectionPath(visiblePath);
</textarea><br /><textarea name='code' class='Java' cols='50'>
// &#28378;&#21160;&#21040;&#21487;&#35265;&#20301;&#32622;
jtNetDevice.scrollPathToVisible(visiblePath);
</textarea><br /><textarea name='code' class='Java' cols='50'>
// &#32473;JTree&#28155;&#21152;&#21491;&#38190;&#24377;&#20986;&#33756;&#21333;
void jtNetDevice_mouseReleased(MouseEvent e) {
	if (e.isPopupTrigger()) {
		jPopupMenu1.show(e.getComponent(), e.getX(), e.getY());//&#24377;&#20986;&#21491;&#38190;&#33756;&#21333;
	}
}
</textarea><br /><textarea name='code' class='Java' cols='50'>
// &#20851;&#20110;JTree&#30340;&#23637;&#24320;
   // If expand is true, expands all nodes in the tree.
   // Otherwise, collapses all nodes in the tree.
public void expandAll(JTree tree, boolean expand) {
	TreeNode root = (TreeNode)tree.getModel().getRoot();
	// Traverse tree from root
	expandAll(tree, new TreePath(root), expand);
}
private void expandAll(JTree tree, TreePath parent, boolean expand) {
	// Traverse children
	TreeNode node = (TreeNode)parent.getLastPathComponent();
	if (node.getChildCount() &gt;= 0) {
		for (Enumeration e=node.children(); e.hasMoreElements(); ) {
			TreeNode n = (TreeNode)e.nextElement();
			TreePath path = parent.pathByAddingChild(n);
			expandAll(tree, path, expand);
		}
	}
	// Expansion or collapse must be done bottom-up
	if (expand) {
		tree.expandPath(parent);
	} else {
		tree.collapsePath(parent);
	}
}
</textarea><br /><textarea name='code' class='Java' cols='50'>
// &#22914;&#20309;&#36941;&#21382;JTree 
	// &#21019;&#24314;&#26641;
JTree tree = new JTree();
// &#28155;&#21152;&#26641;&#33410;&#28857;......
// ... 

visitAllNodes(tree); // &#36941;&#21382;&#25152;&#26377;&#33410;&#28857;
visitAllExpandedNodes(tree); // &#20165;&#36941;&#21382;&#23637;&#24320;&#30340;&#33410;&#28857;

// Traverse all nodes in tree
public void visitAllNodes(JTree tree) {
	TreeNode root = (TreeNode)tree.getModel().getRoot();
	visitAllNodes(root);
}
public void visitAllNodes(TreeNode node) {
	// node is visited exactly once
	process(node);
	if (node.getChildCount() &gt;= 0) {
		for (Enumeration e=node.children(); e.hasMoreElements(); ) {
			TreeNode n = (TreeNode)e.nextElement();
			visitAllNodes(n);
		}
	}
}
   
// Traverse all expanded nodes in tree
public void visitAllExpandedNodes(JTree tree) {
	TreeNode root = (TreeNode)tree.getModel().getRoot();
	visitAllExpandedNodes(tree, new TreePath(root));
}
public void visitAllExpandedNodes(JTree tree, TreePath parent) {
	// Return if node is not expanded
	if (!tree.isVisible(parent)) return;

	// node is visible and is visited exactly once
	TreeNode node = (TreeNode)parent.getLastPathComponent();
	process(node);

	// Visit all children
	if (node.getChildCount() &gt;= 0) {
		for (Enumeration e=node.children(); e.hasMoreElements(); ) {
			TreeNode n = (TreeNode)e.nextElement();
			TreePath path = parent.pathByAddingChild(n);
			visitAllExpandedNodes(tree, path);
		}
	}
}
</textarea>]]></content><publish>2007-10-11 23:41:59</publish><update>2008-07-06 13:30:00</update><comment>0</comment><view>4421</view></article><comments/><previous id="138"><title>在 Java 中实现 Flash 播放</title></previous><next id="140"><title>VB6中SendKeys的基本应用</title></next></content></panel></panels><modules><module id="4" sn="3" sys="true"><name>Category</name><title>日志分类</title></module><module id="6" sn="4" sys="true"><name>Archive</name><title>日志归档</title></module><module id="5" sn="5" sys="true"><name>User Panel</name><title>控制面板</title></module><module id="10" sn="6" sys="true"><name>Recent Article</name><title>最新日志</title></module><module id="8" sn="7" sys="true"><name>Search</name><title>查询搜索</title></module><module id="7" sn="8" sys="true"><name>Recent Comments</name><title>最新评论</title></module><module id="2" sn="9" sys="true"><name>Statistics</name><title>统计信息</title></module></modules><user><usn></usn><status>3</status><login>false</login></user></blog>
