JTree简单的应用addTreeWillExpandListener

package com.kevin.treedemo.filesystem;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeWillExpandListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.ExpandVetoException;
import javax.swing.tree.TreePath;

public class FileTree extends JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	JTree tree = null;
	DefaultMutableTreeNode root = new DefaultMutableTreeNode("D");
	public FileTree() {
		setLayout(new BorderLayout(0, 0));
		
		tree = new JTree(root,true);
		
		JScrollPane scrollPane = new JScrollPane(tree);
		
		add(scrollPane, BorderLayout.CENTER);
		
		initTree();
		
		initTreeListener();
	}
	private void initTreeListener() {
		tree.addTreeWillExpandListener(new TreeWillExpandListener(){

			@Override
			public void treeWillExpand(TreeExpansionEvent event)
					throws ExpandVetoException {
				TreePath o = event.getPath();
				DefaultMutableTreeNode node = (DefaultMutableTreeNode)o.getLastPathComponent();
				String file = node.toString();
				String[] files = FiltUtil.listDir("D:\\"+file);
				if(null == files){
					return;
				}
				for(String f:files){
					node.add(new DefaultMutableTreeNode(f,!FiltUtil.isFile("D:\\"+file+"\\"+f)));
				}
				//不能使用updateUI,否则会出现异常
				/*Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
					at javax.swing.plaf.basic.BasicTreeUI.updateSize(BasicTreeUI.java:1801)
					at javax.swing.plaf.basic.BasicTreeUI.toggleExpandState(BasicTreeUI.java:2210)
					at javax.swing.plaf.basic.BasicTreeUI.handleExpandControlClick(BasicTreeUI.java:2196)
					at javax.swing.plaf.basic.BasicTreeUI.checkForClickInExpandControl(BasicTreeUI.java:2154)
					at javax.swing.plaf.basic.BasicTreeUI$Handler.handleSelection(BasicTreeUI.java:3508)
					at javax.swing.plaf.basic.BasicTreeUI$Handler.mousePressed(BasicTreeUI.java:3456)
					at java.awt.Component.processMouseEvent(Component.java:6035)
					at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
					at java.awt.Component.processEvent(Component.java:5803)
					at java.awt.Container.processEvent(Container.java:2058)
					at java.awt.Component.dispatchEventImpl(Component.java:4410)
					at java.awt.Container.dispatchEventImpl(Container.java:2116)
					at java.awt.Component.dispatchEvent(Component.java:4240)
					at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
					at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3983)
					at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
					at java.awt.Container.dispatchEventImpl(Container.java:2102)
					at java.awt.Window.dispatchEventImpl(Window.java:2429)
					at java.awt.Component.dispatchEvent(Component.java:4240)
					at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
					at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
					at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
					at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
					at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
					at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
					at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
				 */
				//tree.updateUI();
				
			}

			@Override
			public void treeWillCollapse(TreeExpansionEvent event)
					throws ExpandVetoException {
			}
			
		});
		
	}
	private void initTree() {
		String [] files = FiltUtil.listDir("D:\\");
		for(String file:files){
			root.add(new DefaultMutableTreeNode(file,!FiltUtil.isFile("D:\\"+file)));
		}
		tree.updateUI();
	}
	
	public static void main(String[] args){
		JFrame f = new JFrame();
		f.setSize(500, 400);
		f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
		f.setContentPane(new FileTree());
		f.setVisible(true);
	}

}

package com.kevin.treedemo.filesystem;

import java.io.File;

public class FiltUtil {
	public static String[] listDir(String path){
		File file = new File(path);
		if(file.isDirectory()){
			return file.list();
		} else {
			return null;
		}
	}
	
	public static boolean isFile(String path){
		File file = new File(path);
		return file.isFile();
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值