根据指定字符串添加JTree中的节点

直接上代码吧

import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;

public class AddNodesByStringDemo extends JFrame {

	protected DefaultMutableTreeNode rootNode;
	protected DefaultTreeModel treeModel;
	protected JTree tree;
	String path = "C:/Prpgram Files/Java/lib";//将要被分割的字符串
	String [] nodes;//用来存放根据path生成的字符串数组

	public static void main(String [] args){
		AddNodesByStringDemo f = new AddNodesByStringDemo();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setSize(200, 500);
		f.setVisible(true);		
	}
	public AddNodesByStringDemo() {	
		rootNode = new DefaultMutableTreeNode("Root Node");//生成根节点
		treeModel = new DefaultTreeModel(rootNode);//生成有根节点的TreeModel
		treeModel.addTreeModelListener(new MyTreeModelListener());//添加TreeModel的监听
		tree = new JTree(treeModel);
		tree.setEditable(true);
		tree.getSelectionModel().setSelectionMode(
				TreeSelectionModel.SINGLE_TREE_SELECTION);//给树定义选择模式为单选
		tree.setShowsRootHandles(true);//显示根节点
		JScrollPane scrollPane = new JScrollPane(tree);
		add(scrollPane);//添加滚动面板
		populateTree();
	}
	
	public String [] getNodes(String s){
		String [] a ;
		a = s.split("/");
		return a;
	}
	/**根据节点数组添加节点**/
	public void populateTree() {
		nodes = getNodes(path);
        List <DefaultMutableTreeNode> node = new  ArrayList<DefaultMutableTreeNode>();
        for(int i=0;i<nodes.length;i++){
        	DefaultMutableTreeNode n = new DefaultMutableTreeNode();
        	if(i==0){
        		n = this.addObject(null, nodes[0]);
        	}else{
        		n = this.addObject(node.get(i-1), nodes[i]);
        	}
        	node.add(n);       	
        }
    }
	/** 给当前选择的节点添加子节点 */
	public DefaultMutableTreeNode addObject(Object child) {
		DefaultMutableTreeNode parentNode = null;
		TreePath parentPath = tree.getSelectionPath();

		if (parentPath == null) {
			parentNode = rootNode;
		} else {
			parentNode = (DefaultMutableTreeNode) (parentPath
					.getLastPathComponent());
		}

		return addObject(parentNode, child, true);
	}

	public DefaultMutableTreeNode addObject(DefaultMutableTreeNode parent,
			Object child) {
		return addObject(parent, child, false);
	}

	public DefaultMutableTreeNode addObject(DefaultMutableTreeNode parent,
			Object child, boolean shouldBeVisible) {
		DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(child);

		if (parent == null) {
			parent = rootNode;
		}
		// It is key to invoke this on the TreeModel, and NOT
		// DefaultMutableTreeNode
		treeModel.insertNodeInto(childNode, parent, parent.getChildCount());
		// Make sure the user can see the lovely new node.
		if (shouldBeVisible) {
			tree.scrollPathToVisible(new TreePath(childNode.getPath()));
		}
		return childNode;
	}

	class MyTreeModelListener implements TreeModelListener {
		public void treeNodesChanged(TreeModelEvent e) {
			DefaultMutableTreeNode node;
			node = (DefaultMutableTreeNode) (e.getTreePath()
					.getLastPathComponent());
			/*
			 * If the event lists children, then the changed node is the child
			 * of the node we've already gotten. Otherwise, the changed node and
			 * the specified node are the same.
			 */

			int index = e.getChildIndices()[0];
			node = (DefaultMutableTreeNode) (node.getChildAt(index));

			System.out.println("The user has finished editing the node.");
			System.out.println("New value: " + node.getUserObject());
		}
		public void treeNodesInserted(TreeModelEvent e) {
		}

		public void treeNodesRemoved(TreeModelEvent e) {
		}

		public void treeStructureChanged(TreeModelEvent e) {
		}
	}
}
 其中用的addObject方法,和TreeModelListener是参考 How to Use Trees http://download.oracle.com/javase/tutorial/uiswing/components/tree.html 上的、
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值