📄 projecttreepanel.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 + -