2019.10.31
树 实训作业
1、创建树形结构如下(参考ppt【例1.1】、或教材P401【例22.1】):(40分)
代码:
package MyTree;
import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;
public class MyEnterprise {
JFrame f;
JTree tree;
DefaultTreeModel treemodel;
DefaultMutableTreeNode root,top1,top2,top3,top4,top5,node1,node2,node3,node4;
public MyEnterprise() {
f=new JFrame("企业架构");
f.setVisible(true);
f.setBounds(500, 150, 300, 400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
root=new DefaultMutableTreeNode("倾诚爱家");
top1=new DefaultMutableTreeNode("经理办公室");
top2=new DefaultMutableTreeNode("人事部");
top3=new DefaultMutableTreeNode("技术部");
top4=new DefaultMutableTreeNode("服务部");
top5=new DefaultMutableTreeNode("推广部");
node1=new DefaultMutableTreeNode("网络维护部");
node2=new DefaultMutableTreeNode("应用开发部");
node3=new DefaultMutableTreeNode("网络服务部");
node4=new DefaultMutableTreeNode("内勤开发部");
root.add(top1);
root.add(top2);
root.add(top3);
root.add(top4);
root.add(top5);
top3.add(node1);
top3.add(node2);
top4.add(node3);
top4.add(node4);
treemodel=new DefaultTreeModel(root);
tree=new JTree(treemodel);
f.add(tree,BorderLayout.CENTER);
}
public static void main(String[] args) {
new MyEnterprise();
}
}
运行截图:
2、用JTree组件创建图所示的树型结构的信息。
代码:
package MyTree;
import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;
public class MyTree{
JFrame f;
JTree tree;
DefaultTreeModel treemodel;
DefaultMutableTreeNode root,top1,top2,top3,top4,node1,node2,node3,node4,node5,node6;
public MyTree() {
f=new JFrame("TreeDemo");
f.setVisible(true);
f.setBounds(400, 200, 300, 400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
root=new DefaultMutableTreeNode("资源管理器");
top1=new DefaultMutableTreeNode("我的公文包");
top2=new DefaultMutableTreeNode("我的电脑");
top3=new DefaultMutableTreeNode("收藏夹");
top4=new DefaultMutableTreeNode("Readme");
node1=new DefaultMutableTreeNode("公司文件");
node2=new DefaultMutableTreeNode("私人文件");
node3=new DefaultMutableTreeNode("本机磁盘(C:)");
node4=new DefaultMutableTreeNode("本机磁盘(D:)");
node5=new DefaultMutableTreeNode("本机磁盘(E:)");
node6=new DefaultMutableTreeNode("网站列表");
root.add(top1);
root.add(top2);
root.add(top3);
root.add(top4);
top1.add(node1);
top1.add(node2);
top2.add(node3);
top2.add(node4);
top2.add(node5);
top3.add(node6);
treemodel=new DefaultTreeModel(root);
tree=new JTree(treemodel);
f.add(tree,BorderLayout.CENTER);
}
public static void main(String[] args){
new MyTree();
}
}
运行截图:
3、为树加上事件响应,单击某结点后,在右侧显示该结点名称及树路径,
代码:
package MyTree;
import javax.swing.tree.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class Example_Tree {
JFrame f;
JTree tree;
DefaultMutableTreeNode top,node1,node2,node3,node4,node5,node6;
DefaultTreeModel treemodel;
public Example_Tree() {
f=new JFrame();
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setBounds(100, 100, 400, 400);
top=new DefaultMutableTreeNode("本地磁盘(D:)");
node1=new DefaultMutableTreeNode("图片");
node2=new DefaultMutableTreeNode("千山--世博园旅游");
node3=new DefaultMutableTreeNode("凤凰山--大鹿岛旅游");
node4=new DefaultMutableTreeNode("大浪淘沙.GIF");
node5=new DefaultMutableTreeNode("辽阔的大海.JPG");
node6=new DefaultMutableTreeNode("音乐");
top.add(node1);
top.add(node6);
node1.add(node2);
node1.add(node3);
node3.add(node4);
node3.add(node5);
treemodel=new DefaultTreeModel(top);
tree=new JTree(treemodel);
TreeSelectionModel treeSelectionModel=tree.getSelectionModel();
treeSelectionModel.setSelectionMode(2);
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
if(!tree.isSelectionEmpty()) {
TreePath[] selectionPaths=tree.getSelectionPaths();
for(int i=0;i<selectionPaths.length;i++) {
TreePath treePath=selectionPaths[i];
Object[] path=treePath.getPath();
for(int j=0;j<path.length;j++) {
DefaultMutableTreeNode node;
node=(DefaultMutableTreeNode)path[j];
String s=node.getUserObject()+(j==(path.length-1)?"":"-->");
System.out.print(s);
}
System.out.println();
}System.out.println();
}}});
f.add(tree,BorderLayout.CENTER);
}
public static void main(String[] args) {
new Example_Tree();
}
}
运行截图:
4、通过维护树模型,实现维护企业架构树,效果如下图所示
代码:
package MyTree;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.tree.*;
public class MyEnterPriseFix {
JFrame f;
JTree tree;
JPanel p;
JButton b1,b2,b3;
JLabel l;
JTextField t;
DefaultTreeModel treemodel;
DefaultMutableTreeNode root,top1,top2,top3,top4,top5,node1,node2,node3,node4;
public MyEnterPriseFix() {
f=new JFrame("企业架构");
p=new JPanel();
b1=new JButton("添加");
b2=new JButton("修改");
b3=new JButton("删除");
l=new JLabel("名称:");
t=new JTextField(6);
f.setVisible(true);
f.setBounds(500, 150, 320, 400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
root=new DefaultMutableTreeNode("倾诚爱家");
top1=new DefaultMutableTreeNode("经理办公室");
top2=new DefaultMutableTreeNode("人事部");
top3=new DefaultMutableTreeNode("技术部");
top4=new DefaultMutableTreeNode("服务部");
top5=new DefaultMutableTreeNode("推广部");
node1=new DefaultMutableTreeNode("网络维护部");
node2=new DefaultMutableTreeNode("应用开发部");
node3=new DefaultMutableTreeNode("网络服务部");
node4=new DefaultMutableTreeNode("内勤开发部");
root.add(top1);
root.add(top2);
root.add(top3);
root.add(top4);
root.add(top5);
top3.add(node1);
top3.add(node2);
top4.add(node3);
top4.add(node4);
treemodel=new DefaultTreeModel(root);
tree=new JTree(treemodel);
p.add(l);
p.add(t);
p.add(b1);
p.add(b2);
p.add(b3);
f.add(p,BorderLayout.SOUTH);
f.add(tree,BorderLayout.CENTER);
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DefaultMutableTreeNode node=new DefaultMutableTreeNode(t.getText());
TreePath selectionpath=tree.getSelectionPath();
DefaultMutableTreeNode parentnode=(DefaultMutableTreeNode)selectionpath.getLastPathComponent();
treemodel.insertNodeInto(node, parentnode, parentnode.getChildCount());
TreePath path=selectionpath.pathByAddingChild(node);
if(!tree.isVisible(path)) {
tree.makeVisible(path);
}
t.setText("");
}
});
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
TreePath selectionpath=tree.getSelectionPath();
DefaultMutableTreeNode node=(DefaultMutableTreeNode)selectionpath.getLastPathComponent();
node.setUserObject(t.getText());
treemodel.nodeChanged(node);
tree.setSelectionPath(selectionpath);
t.setText("");
}
});
b3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
if(!node.isRoot()) {
DefaultMutableTreeNode nextselectednode=node.getNextSibling();
if(nextselectednode==null) {
nextselectednode=(DefaultMutableTreeNode)node.getParent();
treemodel.removeNodeFromParent(node);
tree.setSelectionPath(new TreePath(nextselectednode.getPath()));
t.setText("");
}
}
}
});
}
public static void main(String[] args) {
new MyEnterPriseFix();
}
}
运行截图: