public TreeDemo6() { JFrame f = new JFrame("TreeDemo"); Container contentPane = f.getContentPane();
DefaultMutableTreeNode root = new DefaultMutableTreeNode("资源管理器");
tree = new JTree(root); tree.setEditable(true); tree.addMouseListener(new MouseHandle()); treeModel = (DefaultTreeModel)tree.getModel(); treeModel.addTreeModelListener(this);
JScrollPane scrollPane = new JScrollPane(); scrollPane.setViewportView(tree);
JPanel panel = new JPanel(); JButton b = new JButton("新增节点"); b.addActionListener(this); panel.add(b); b = new JButton("删除节点"); b.addActionListener(this); panel.add(b); b = new JButton("清除所有节点"); b.addActionListener(this); panel.add(b);
label = new JLabel("Action"); contentPane.add(panel,BorderLayout.NORTH); contentPane.add(scrollPane,BorderLayout.CENTER); contentPane.add(label,BorderLayout.SOUTH); f.pack(); f.setVisible(true);
改写其方法getTreeCellRendererComponent,如下。其中NodeInformation为自己的存在TreeNode中的类,根据它的一个Field int type来决定显示那个图标。
public class EnhancedTreeCellRenderer extends DefaultTreeCellRenderer{
private Icon root,bean,trade,buss,from;
public EnhancedTreeCellRenderer() {
root = Utilities.getIcon("./images/Host16.gif");
bean = Utilities.getIcon("./images/Bean16.gif");
trade = Utilities.getIcon("./images/Movie16.gif");
buss = Utilities.getIcon("./images/War16.gif");
from = Utilities.getIcon("./images/WebComponent16.gif");
}
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;
NodeInformation nodeInfo = (NodeInformation)(node.getUserObject());
int type = nodeInfo.getNodeType();
switch(type) {
case 0 :setIcon(root);
break;
case 5 :setIcon(buss);
break;
case 6 :setIcon(from);
break;
case 18:setIcon(trade);
break;
case 12:
case 13:setIcon(bean);
break;
default :
break;
}
return this;
}
}
再使用
tree.setCellRenderer(new EnhancedTreeCellRenderer());
就一切ok了
这个名字是瞎想的。
还有,我的意思是:JTree树的节点都是文字,就是我可以随意改成我自己想要的文字.不是图标.
不要点鼠标
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;public class TreeDemo6 implements ActionListener,TreeModelListener
{
JLabel label = null;
JTree tree = null;
DefaultTreeModel treeModel = null;
String nodeName = null; //原有节点名称
public TreeDemo6()
{
JFrame f = new JFrame("TreeDemo");
Container contentPane = f.getContentPane();
DefaultMutableTreeNode root = new DefaultMutableTreeNode("资源管理器");
tree = new JTree(root);
tree.setEditable(true);
tree.addMouseListener(new MouseHandle());
treeModel = (DefaultTreeModel)tree.getModel();
treeModel.addTreeModelListener(this);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(tree);
JPanel panel = new JPanel();
JButton b = new JButton("新增节点");
b.addActionListener(this);
panel.add(b);
b = new JButton("删除节点");
b.addActionListener(this);
panel.add(b);
b = new JButton("清除所有节点");
b.addActionListener(this);
panel.add(b);
label = new JLabel("Action");
contentPane.add(panel,BorderLayout.NORTH);
contentPane.add(scrollPane,BorderLayout.CENTER);
contentPane.add(label,BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}); }
public void actionPerformed(ActionEvent ae)
{
if (ae.getActionCommand().equals("新增节点"))
{
DefaultMutableTreeNode parentNode = null;
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("新节点");
newNode.setAllowsChildren(true);
TreePath parentPath = tree.getSelectionPath(); parentNode = (DefaultMutableTreeNode)
(parentPath.getLastPathComponent()); treeModel.insertNodeInto(newNode,parentNode,parentNode.getChildCount());
tree.scrollPathToVisible(new TreePath(newNode.getPath()));
label.setText("新增节点成功");
}
if (ae.getActionCommand().equals("删除节点"))
{
TreePath treepath = tree.getSelectionPath();
if (treepath != null)
{
DefaultMutableTreeNode selectionNode = (DefaultMutableTreeNode)
treepath.getLastPathComponent();
TreeNode parent = (TreeNode)selectionNode.getParent();
if (parent != null)
{
treeModel.removeNodeFromParent(selectionNode);
treeModel.reload();
label.setText("删除节点成功");
}
}
}
if (ae.getActionCommand().equals("清除所有节点"))
{
DefaultMutableTreeNode rootNode = (DefaultMutableTreeNode)treeModel.getRoot();
rootNode.removeAllChildren();
treeModel.reload();
label.setText("清除所有节点成功");
}
}
public void treeNodesChanged(TreeModelEvent e) {
TreePath treePath = e.getTreePath();
DefaultMutableTreeNode node = (DefaultMutableTreeNode)treePath.getLastPathComponent();
try {
int[] index = e.getChildIndices();
node = (DefaultMutableTreeNode)node.getChildAt(index[0]);
} catch (NullPointerException exc) {}
label.setText(nodeName+" 更改数据为: "+(String)node.getUserObject());
}
public void treeNodesInserted(TreeModelEvent e) {
System.out.println("new node inserted");
}
public void treeNodesRemoved(TreeModelEvent e) {
System.out.println("node deleted");
}
public void treeStructureChanged(TreeModelEvent e) {
System.out.println("structrue changed");
} public static void main(String args[]) {
new TreeDemo6();
}
class MouseHandle extends MouseAdapter
{
public void mousePressed(MouseEvent e)
{
try{
JTree tree = (JTree)e.getSource();
int rowLocation = tree.getRowForLocation(e.getX(), e.getY());
TreePath treepath = tree.getPathForRow(rowLocation);
TreeNode treenode = (TreeNode) treepath.getLastPathComponent();
nodeName = treenode.toString();
}catch(NullPointerException ne){}
}
}
}