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();
	}
}

运行截图:


posted @ 2020-01-07 22:48  z全  阅读(108)  评论(0编辑  收藏  举报