十五、java树的使用

一、JTree基础设置

package 树;

import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;

public class tree1 {
	public static void main(String[] args) {
		JFrame f=new JFrame();
		DefaultMutableTreeNode  root=new DefaultMutableTreeNode("根节点");
		DefaultMutableTreeNode subnode1=new DefaultMutableTreeNode("子节点1");
		DefaultMutableTreeNode subnode2=new DefaultMutableTreeNode("子节点2");
		
		DefaultMutableTreeNode subnode11=new DefaultMutableTreeNode("子节点11");
		DefaultMutableTreeNode subnode12=new DefaultMutableTreeNode("子节点12");
		root.add(subnode1);root.add(subnode2);
		subnode1.add(subnode11);subnode1.add(subnode12);
		
		JTree tree=new JTree(root);
		f.getContentPane().add(tree);
		
		TreeSelectionModel model=tree.getSelectionModel();
//		model.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);//单选
//		model.setSelectionMode(TreeSelectionModel.CONTIGUOUS_TREE_SELECTION);//连续选
		model.setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);//多选
		
		tree.addTreeSelectionListener(new TreeSelectionListener() {
			
			@Override
			public void valueChanged(TreeSelectionEvent e) {
				JTree t=(JTree) e.getSource();
				if(!t.isSelectionEmpty()) {
					TreePath paths[]=t.getSelectionPaths();
					for(TreePath path:paths) {
						//System.out.println(path);
						Object obj[]=path.getPath();
						for(Object o:obj) {
							System.out.println(o);						}
					}
				}
				
			}
		});
		
//		tree.setRootVisible(false);//不显示根节点
//		tree.setShowsRootHandles(false);//显示根节点手柄
		
//		DefaultTreeCellRenderer render=(DefaultTreeCellRenderer) tree.getCellRenderer();
//		render.setLeafIcon(new ImageIcon("树/1.png"));//叶子结点
//		render.setOpenIcon(new ImageIcon("树/2.png"));//节点打开时
//		render.setClosedIcon(new ImageIcon("树/3.png"));//节点关闭时
		
		tree.putClientProperty("JTree.lineStyle", "Horizontal");//连接线效果
		
		f.setSize(800,600);
		f.setLocationRelativeTo(null);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
	}

}

 

 二、树模型的修改

package 树;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;

public class tree2 extends JFrame{
	private JTextField textfield;
	private DefaultTreeModel treemodel;
	private JTree tree;
	private JButton addbutton,upbutton,delbutton;
	private JScrollPane scrollPane;
	
	public tree2() {
		super();
		setTitle("维护树的模型");
		setBounds(100,100,500,400);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		getContentPane().add(scrollPane,BorderLayout.CENTER);
		
		DefaultMutableTreeNode root=new DefaultMutableTreeNode("新疆师范大学");
		DefaultMutableTreeNode node1=new DefaultMutableTreeNode("计算机科学技术学院");
		DefaultMutableTreeNode node2=new DefaultMutableTreeNode("地理科学旅游学院");
		DefaultMutableTreeNode node3=new DefaultMutableTreeNode("物理电子学院");
		DefaultMutableTreeNode node4=new DefaultMutableTreeNode("音乐学院");
		root.add(node1);root.add(node2);root.add(node3);root.add(node4);
		node1.add(new DefaultMutableTreeNode("计算机科学与技术"));
		node1.add(new DefaultMutableTreeNode("软件工程"));
		node1.add(new DefaultMutableTreeNode("网络工程"));
		node2.add(new DefaultMutableTreeNode("地理科学"));
		node2.add(new DefaultMutableTreeNode("旅游管理"));
				
		treemodel=new DefaultTreeModel(root,true);
		tree=new JTree(treemodel);
		tree.setSelectionPath(new TreePath(root));
		scrollPane.setViewportView(tree);
		
		final JPanel panel=new JPanel();
		getContentPane().add(panel,BorderLayout.SOUTH);
		
		final JLabel label=new JLabel();
		label.setText("名称:");
		panel.add(label);
		
		textfield =new JTextField();
		textfield.setColumns(8);;
		textfield.setText("测试");
		panel.add(textfield);
		
		addbutton=new JButton("添加");
		upbutton=new JButton ("修改");
		delbutton=new JButton("删除");
		panel.add(addbutton);panel.add(delbutton);panel.add(upbutton);

		 addbutton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				DefaultMutableTreeNode node=new DefaultMutableTreeNode(textfield.getText());//
				TreePath selectpath=tree.getSelectionPath();
				DefaultMutableTreeNode parentnode=(DefaultMutableTreeNode) selectpath.getLastPathComponent();
				
				treemodel.insertNodeInto(node, parentnode, parentnode.getChildCount());
				
				TreePath path=selectpath.pathByAddingChild(node);
				
				// TODO 自动生成的方法存根
				
			}
		});
		 upbutton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				TreePath selectpath=tree.getSelectionPath();
				DefaultMutableTreeNode node=(DefaultMutableTreeNode) selectpath.getLastPathComponent();
				node.setUserObject(textfield.getText());
				treemodel.nodeChanged(node);//修改
				tree.setSelectionPath(selectpath);
				// TODO 自动生成的方法存根
				
			}
		});
		 delbutton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				TreePath selectpath=tree.getSelectionPath();
				DefaultMutableTreeNode node=(DefaultMutableTreeNode) selectpath.getLastPathComponent();
				treemodel.removeNodeFromParent(node);
				//tree.setSelectionPath(selectpath);
				// TODO 自动生成的方法存根
				
			}
		});
		
	}
	public static void main(String[] args) {
		tree2 t=new tree2();
		t.setVisible(true);
	}

}

 三、处理节点事件

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小郭同学忒骚了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值