swing的JTree练习

package package2;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;

/*
 * 树的练习,默认节点DefaultMutableTreeNode
 * */
public class Tree_practice extends JFrame {
	Container container;
	JTree tree;
	JScrollPane scrollpane;

	public Tree_practice() {
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.container = this.getContentPane();
		DefaultMutableTreeNode root = new DefaultMutableTreeNode("C:\\");
		DefaultMutableTreeNode col1 = new DefaultMutableTreeNode("Docs");
		DefaultMutableTreeNode col2 = new DefaultMutableTreeNode("Rename");
		root.add(col1);
		root.add(col2);
		DefaultMutableTreeNode col21 = new DefaultMutableTreeNode("API");
		DefaultMutableTreeNode col22 = new DefaultMutableTreeNode("Index.hlml",
				false);
		col1.add(col21);
		col1.add(col22);
		DefaultMutableTreeNode col31 = new DefaultMutableTreeNode(
				"swing.tree.*");
		col21.add(col31);
		DefaultMutableTreeNode col41 = new DefaultMutableTreeNode(
				"JCompnent.html", false);
		DefaultMutableTreeNode col42 = new DefaultMutableTreeNode(
				"JButton.hlml", false);
		DefaultMutableTreeNode col43 = new DefaultMutableTreeNode(
				"JLabel.hlml", false);
		col31.add(col43);
		col31.add(col42);
		col31.add(col41);
		tree = new JTree(root);
		scrollpane = new JScrollPane(tree);
		this.container.add(scrollpane);
		this.setLocation(300, 100);
		this.setSize(600, 600);
		this.setVisible(true);
	}
}

class TTreeCellRenderer{
	public TTreeCellRenderer(){
		Tree_practice t=new Tree_practice();
//		t.tree.putClientProperty("JTree.lineStyle", "Angled");
//		t.tree.putClientProperty("JTree.lineStyle", "None");
		DefaultTreeCellRenderer render=
				(DefaultTreeCellRenderer)t.tree.getCellRenderer();//设置显示样式
		t.tree.setRowHeight(40);
		render.setDoubleBuffered(true);
		render.setLeafIcon(new ImageIcon("7.png"));//叶子图标
		render.setOpenIcon(new ImageIcon("10.png"));//节点打开图标
		render.setClosedIcon(new ImageIcon("9.png"));//节点关闭图标
		render.setFont(new Font(
				"Monospaced",Font.BOLD|Font.ITALIC,15));
		render.setTextNonSelectionColor(Color.black);//未选中时字体颜色
		render.setTextSelectionColor(Color.red);//选中时字体颜色
		render.setBorderSelectionColor(Color.blue);//选中时边界颜色
		t.invalidate();
	}
}
/*
 * 定制树模型显示文件系统层次结构的JTree
 */
class TTreeModel extends JFrame {
	public TTreeModel() {
		super("TTreeModel");
		FileSystemModel fs = new FileSystemModel();
		JTree tree = new JTree(fs);
		JScrollPane scroll = new JScrollPane(tree);
		this.getContentPane().add(scroll);
		this.setSize(600, 600);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
}

class FileSystemModel implements TreeModel, TreeModelListener {
	private String root;
	private Vector listeners;

	public FileSystemModel() {
		// this.root=System.getProperty("user.home");
		// if(System.getProperty("os.name").equals("Windows 95")){
		// File tempFile=new File(root);
		// root=tempFile.getParent();
		// }
		this.root = "D:\\";
		this.listeners = new Vector();
	}

	@Override
	public Object getRoot() {
		return (new File(root));
	}

	@Override
	public Object getChild(Object parent, int index) {
		File directory = (File) parent;
		String[] dirMembers = directory.list();
		return (new File(directory, dirMembers[index]));
	}

	@Override
	public int getChildCount(Object parent) {
		File file = (File) parent;
		if (file.isDirectory()) {
			String[] dirMembers = file.list();
			if (dirMembers == null)
				return 0;
			return dirMembers.length;
		} else
			return 0;
	}

	@Override
	public boolean isLeaf(Object node) {
		return ((File) node).isFile();
	}

	@Override
	public void valueForPathChanged(TreePath path, Object newValue) {
		// TODO Auto-generated method stub

	}

	@Override
	public int getIndexOfChild(Object parent, Object child) {
		File directory = (File) parent;
		String[] dirMembers = directory.list();
		File fchild = (File) child;
		for (int j = 0; j < dirMembers.length; j++)
			if (fchild.getName().equals(dirMembers[j]))
				return j;
		return -1;
	}

	@Override
	public void addTreeModelListener(TreeModelListener l) {
		if (l != null && !this.listeners.contains(l)) {
			this.listeners.add(l);
		}
	}

	@Override
	public void removeTreeModelListener(TreeModelListener l) {
		if (l != null) {
			this.listeners.removeElement(l);
		}
	}

	@Override
	public void treeNodesChanged(TreeModelEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void treeNodesInserted(TreeModelEvent e) {
		Enumeration listenerCount = this.listeners.elements();
		while (listenerCount.hasMoreElements()) {
			TreeModelListener listener = (TreeModelListener) listenerCount
					.nextElement();
			listener.treeNodesInserted(e);
		}
	}

	@Override
	public void treeNodesRemoved(TreeModelEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void treeStructureChanged(TreeModelEvent e) {
		// TODO Auto-generated method stub

	}
}

//树选择事件处理
class TTreeSelectionEvent extends JFrame {
	Container container;
	DefaultMutableTreeNode root;
	JScrollPane treePane;
	JScrollPane editorPane;
	JEditorPane editor;
	TTreeSelectionEvent temp=this;
	public TTreeSelectionEvent() {
		super("TTreeSelectionEvent");
		this.container = this.getContentPane();
		this.CreateTreeNodes();
		JTree tree = new JTree(root);
//		tree.getSelectionModel().setSelectionMode(
//				TreeSelectionModel.SINGLE_TREE_SELECTION);
		tree.addTreeSelectionListener(new TreeSelectionListener() {

			private void DoSingleSelection(TreeSelectionEvent e){
				JTree tree = (JTree) e.getSource();
				DefaultMutableTreeNode select = (DefaultMutableTreeNode) tree
						.getLastSelectedPathComponent();
				TreePath[]tp=tree.getSelectionPaths();
				if (select.isLeaf()) {
					TreePath path = e.getPath();
					Object[] nodes = path.getPath();
					String s = "";
					for (int j = 0; j < nodes.length; j++)
						s += ((DefaultMutableTreeNode) nodes[j]).toString()
								+ "\\\\";
					editor.setEditable(true);
					s = s.substring(0, s.length() - 2);
					editor.setText(s);
					editor.addFocusListener(new FocusListener() {

						String file;

						@Override
						public void focusGained(FocusEvent e) {
							file = editor.getText();
						}

						@Override
						public void focusLost(FocusEvent e) {
							try {
								if(file==null)
									return;
								File f=new File(file);
								f.createNewFile();
								FileWriter fw = new FileWriter(file);
								fw.write(editor.getText());
								fw.close();
							} catch (IOException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							}
						}

					});
				}
			}
				
			@Override
			public void valueChanged(TreeSelectionEvent e) {
				JTree tree = (JTree) e.getSource();
				TreeSelectionModel ts=tree.getSelectionModel();
				if(ts.getSelectionMode()==TreeSelectionModel.SINGLE_TREE_SELECTION){//单选
					this.DoSingleSelection(e);
				}else if(ts.getSelectionMode()==TreeSelectionModel.CONTIGUOUS_TREE_SELECTION){//连续选
					
				}else{//多选
					TreePath[]tp=tree.getSelectionPaths();
					if(tp==null)
						return;
					temp.editor.addFocusListener(null);
					temp.editor.setEditable(false);
					String path="All Path:\n";
					for(int j=0;j<tp.length;j++)
						path+=tp[j].toString()+"\n";
					temp.editor.setText(path);
				}
			}

		});
		this.treePane = new JScrollPane(tree);
		this.editor = new JEditorPane();
		this.editorPane = new JScrollPane(this.editor);
		JSplitPane splitpane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
				true, this.treePane, this.editorPane);
		this.container.add(splitpane);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(600, 600);
		this.setVisible(true);
	}

	private void CreateTreeNodes() {
		this.root = new DefaultMutableTreeNode("D:");
		DefaultMutableTreeNode col1 = new DefaultMutableTreeNode("data");
		DefaultMutableTreeNode col2 = new DefaultMutableTreeNode("swing");
		root.add(col1);
		root.add(col2);
		DefaultMutableTreeNode col11 = new DefaultMutableTreeNode("first.txt");
		DefaultMutableTreeNode col12 = new DefaultMutableTreeNode("second.txt");
		col1.add(col11);
		col1.add(col12);
	}
}


最近需要使用swing编点东西,特意学了一下JTree的使用,具体代码如下:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值