跟着练习做了两个小功能 添加同级节点和添加子节点:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter.DEFAULT;
public class Test8 {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
// TODO Auto-generated method stub
TreeFrame tf=new TreeFrame();
}
});
}
}
class TreeFrame extends JFrame{
public TreeFrame() {
// TODO Auto-generated constructor stub
this.setTitle("this is a tree test");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultMutableTreeNode root=new DefaultMutableTreeNode("root");
DefaultMutableTreeNode child1=new DefaultMutableTreeNode("child1");
root.add(child1);
DefaultMutableTreeNode child2=new DefaultMutableTreeNode("child2");
child1.add(child2);
DefaultMutableTreeNode child3=new DefaultMutableTreeNode("child3");
root.add(child3);
final DefaultTreeModel model=new DefaultTreeModel(root);
final JTree jtree=new JTree(model);
JPanel panel=new JPanel();
JButton button=new JButton();
button.setText("click to add sibling node");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
DefaultMutableTreeNode node=((DefaultMutableTreeNode)jtree.getLastSelectedPathComponent());
DefaultMutableTreeNode newnode=new DefaultMutableTreeNode("newNode");
model.insertNodeInto(newnode, (DefaultMutableTreeNode)node.getParent(), node.getParent().getChildCount());
//下面这三行代码的意思是添加节点之后如果有子节点 自动展开
TreeNode[] nodes=model.getPathToRoot(newnode);
TreePath path=new TreePath(nodes);
jtree.scrollPathToVisible(path);
}
});
JButton button2=new JButton();
button2.setText("click to add child node");
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
DefaultMutableTreeNode node=(DefaultMutableTreeNode)jtree.getLastSelectedPathComponent();
DefaultMutableTreeNode newnode=new DefaultMutableTreeNode("child");
model.insertNodeInto(newnode, node, node.getChildCount());
TreeNode[] nodes=model.getPathToRoot(newnode);
TreePath path=new TreePath(nodes);
jtree.scrollPathToVisible(path);
}
});
panel.add(button);
panel.add(button2);
this.add(panel,BorderLayout.SOUTH);
this.add(jtree);
this.setVisible(true);
}
}