直接上代码吧
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
)上的、