⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 projecttreepanel.java

📁 这个小软件( RealEditor )是同学一起编写的
💻 JAVA
字号:
package com.ecust.swing;

import java.awt.*;
import java.awt.event.*;
import java.net.*;

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


public class ProjectTreePanel extends JPanel {
	/**
     * 
     */
    private static final long serialVersionUID = 8146504605092525253L;
    private ImageIcon ICON_PROJECT = new ImageIcon( getResources( "NEWPROJECT.gif" ) );
	private ImageIcon ICON_FOLDER = new ImageIcon( getResources( "FOLDER.gif" ) );
	private ImageIcon ICON_EXPANDEDFOLDER = new ImageIcon( getResources( "EXPANDEDFOLDER.gif" ) );
	private ImageIcon ICON_FILE = new ImageIcon( getResources( "FILE.gif" ) );
	private ImageIcon ICON_DELETE = new ImageIcon( getResources( "DEL.gif" ) );
	private ImageIcon ICON_PROJECTEXPANDED = new ImageIcon( getResources( "PROJECTEXPANDED.gif" ) );
	
	protected JToolBar bar;
	protected JButton newProjectButton;
	protected JButton newFolderButton;
	protected JButton newFileButton;
	protected JButton deleteButton;
	
	protected JTree tree;
	protected DefaultTreeModel model;
	protected DefaultMutableTreeNode projectRoot = null;
	protected JPanel treePanel;
	
	protected String projectName;
	
	private URL getResources( String filename ) {
		URL url = getClass().getResource( "Imgs/" + filename );
		return url;
	} 

	public ProjectTreePanel() {
		setLayout(new BorderLayout());
		
		bar = new JToolBar();
		newProjectButton = new JButton(ICON_PROJECT);
		newFolderButton = new JButton(ICON_FOLDER);
		newFileButton = new JButton(ICON_FILE);
		deleteButton = new JButton(ICON_DELETE);
		
		bar = new JToolBar();
		bar.add(newProjectButton);
		bar.add(newFolderButton);
		bar.add(newFileButton);
		bar.add(deleteButton);
		bar.setFloatable(false);
		add(bar, BorderLayout.NORTH);
		
		projectRoot = null;
		//projectRoot = new DefaultMutableTreeNode(new Data(true, false,"project"));
		model = new DefaultTreeModel(projectRoot);
		tree = new JTree(model);
		tree.setEditable(true);
		tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
		tree.setCellRenderer(new CellRenderer(ICON_PROJECT, ICON_FOLDER, 
							ICON_EXPANDEDFOLDER, ICON_FILE, ICON_PROJECTEXPANDED));
		tree.setEditable(true);
		
		newProjectButton.addActionListener(
				new ActionListener() {
					public void actionPerformed(ActionEvent event) {
					    ProjectDialog projectDialog = new ProjectDialog(null, "New Project", true);
						projectName = projectDialog.getProjectName();
						treePanel.removeAll();
						projectRoot = new DefaultMutableTreeNode(new Data(true, false, projectName));
						model = new DefaultTreeModel(projectRoot);
						tree = new JTree(model);
						tree.setEditable(true);
						tree.setCellRenderer(new CellRenderer(ICON_PROJECT, ICON_FOLDER, 
								ICON_EXPANDEDFOLDER, ICON_FILE, ICON_PROJECTEXPANDED));
						treePanel.add(new JScrollPane(tree), BorderLayout.CENTER);
						validate();
						
					}
				});
		
		newFolderButton.addActionListener(
				new ActionListener() {
					public void actionPerformed(ActionEvent event) {
					   DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)
		                  tree.getLastSelectedPathComponent();

		               if(selectedNode == null) return;

					   String folderName = JOptionPane.showInputDialog("Input Folder Name:  ");
						
						String name = folderName;
						int count = 0;  //计算空格数
						for(count = 0; count < name.length() && name.charAt(count) == ' '; count++);
						name = name.substring(count);
						
						if(name.length() == 0) 
							JOptionPane.showMessageDialog(null, "Please Input Folder Name");	
						else {
							DefaultMutableTreeNode newNode = 
								   new DefaultMutableTreeNode(new Data(false, false, name));
							  
				               model.insertNodeInto(newNode, selectedNode, selectedNode.getChildCount());

				               TreeNode[] nodes = model.getPathToRoot(newNode);
				               TreePath path = new TreePath(nodes);
				               tree.scrollPathToVisible(path); 
							   selectedNode.add(newNode);
						}

						//Object obj = selectedNode.getUserObject();
						//File fileNode = (File)obj;
					   //System.out.println(fileNode.getAbsoluteFile());
					}
				});
		
		newFileButton.addActionListener(
				new ActionListener() {
					public void actionPerformed(ActionEvent event) {
						DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)
		                  tree.getLastSelectedPathComponent();

						if (selectedNode == null) return;

						DefaultMutableTreeNode newNode = 
						   new DefaultMutableTreeNode(new Data(false, true, "file"));
						newNode.setAllowsChildren(false);
						model.insertNodeInto(newNode, selectedNode, selectedNode.getChildCount());

						TreeNode[] nodes = model.getPathToRoot(newNode);
						TreePath path = new TreePath(nodes);
						tree.scrollPathToVisible(path);		
					}
				});
		
		deleteButton.addActionListener(
				new ActionListener() {
					public void actionPerformed(ActionEvent event) {
						DefaultMutableTreeNode selectedNode
		                  = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();

						//System.out.println(selectedNode.isRoot());
						//删除project
						if (selectedNode != null && selectedNode.isRoot()) {
							remove(treePanel);
							treePanel = new JPanel(new BorderLayout());
							projectRoot = null;
							model = new DefaultTreeModel(projectRoot);
							tree = new JTree(model);
							treePanel.add(new JScrollPane(tree), BorderLayout.CENTER);	
							add(treePanel, BorderLayout.CENTER);	
							validate();
						}
			                 
						
						if (selectedNode != null && selectedNode.getParent() != null)
		                  model.removeNodeFromParent(selectedNode);
					}
				});
		
		treePanel = new JPanel(new BorderLayout());
		treePanel.add(new JScrollPane(tree), BorderLayout.CENTER);
		add(treePanel, BorderLayout.CENTER);
		
		
		/*
		DefaultMutableTreeNode projectReoot = 
			new DefaultMutableTreeNode(new Data(true, false,"Computer"));
		*/
		setVisible(true);
	}
	

	
	private class CellRenderer extends DefaultTreeCellRenderer {
		/**
         * 
         */
        private static final long serialVersionUID = -7400410974729429324L;
        protected Icon projectIcon;
		protected Icon folderIcon;
		protected Icon expandedFolderIcon;
		protected Icon fileIcon;
		protected Icon projectExpandedIcon;
		//protected boolean isRoot;

		public CellRenderer(Icon projectIcon, Icon folderIcon, 
				Icon expandedFolderIcon, Icon fileIcon, Icon projectExpandedIcon) {
			this.projectIcon =projectIcon;
			this.folderIcon = folderIcon;
			this.expandedFolderIcon = expandedFolderIcon;
			this.fileIcon = fileIcon;
			this.projectExpandedIcon = projectExpandedIcon;
			
		}
		
		public Component getTreeCellRendererComponent(
                JTree tree,
                Object value,
                boolean sel,
                boolean expanded,
                boolean leaf,
                int row,
                boolean hasFocus) {
			
			super.getTreeCellRendererComponent(
                    tree, value, sel,
                    expanded, leaf, row,
                    hasFocus);
			
			DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
			Object obj = node.getUserObject();
			setText(obj.toString());

	        if (obj instanceof Boolean)
				setText("Retrieving data...");

			if (obj instanceof Data) {
				Data idata = (Data)obj;
				if(idata.getIsRoot() && !expanded)
					setIcon(projectIcon);
				
				if(idata.getIsRoot() && expanded)
					setIcon(projectExpandedIcon);
				
				if(idata.getIsLeaf())
					setIcon(fileIcon);
				
				if(!idata.getIsRoot() && !idata.getIsLeaf())
					if(expanded)
						setIcon(expandedFolderIcon);
					else
						setIcon(folderIcon);
			}
			/*
			if(isRoot && !expanded)
				setIcon(projectIcon);
			
			if(isRoot && expanded)
				setIcon(expandedFolderIcon);
			
			if(isLeaf)
				setIcon(fileIcon);
			
			if(!isRoot && !isLeaf)
				if(expanded)
					setIcon(expandedFolderIcon);
				else
					setIcon(folderIcon);*/
			
			return this;
			
		}
	}

	class Data {
		protected boolean isRoot;
		protected boolean isLeaf;
		protected Object data;
		
		public Data(boolean isRoot, boolean isLeaf, Object data) {
			this.isRoot = isRoot;
			this.isLeaf = isLeaf;
			this.data = data;
		}

		public boolean getIsRoot() {
			return isRoot;
		}
		
		public boolean getIsLeaf() {
			return isLeaf;
		}
		
		public String toString() {
			return data.toString();
		}
	
	}
}




























⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -