我有个目录树,里面有3层节点,我现在能实现这三层是不同的图标,但不知怎么样让在同一层下(第三层)的图标可设置不同,老区分各节点代表的含义。 import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;
public class MenuTree
{
protected static final int filiale1= CONSTANT + 1;
protected static final int filiale2= CONSTANT + 2;
public MenuTree()
{
}
/**
* Description :构造面版节点树
* @param dept部门名
* @param
* @return tree
*/
public static JTree MenuTree(int dept)
{
DefaultMutableTreeNode group = new DefaultMutableTreeNode("集团");
JTree tree = new JTree(group);
if (dept=="filiale1")
{
DefaultMutableTreeNode company= new DefaultMutableTreeNode("分公司");
group.add(manager);
DefaultMutableTreeNode manager= new DefaultMutableTreeNode("总经理");
company.add(manager);
DefaultMutableTreeNode cfo= new DefaultMutableTreeNode("财务部长");
company.add(cfo);
DefaultMutableTreeNode personnel1= new DefaultMutableTreeNode("职员");
company.add(personnel1);
DefaultMutableTreeNode personnel2= new DefaultMutableTreeNode("职员");
company.add(personnel2);
DefaultMutableTreeNode personnel3= new DefaultMutableTreeNode("职员");
company.add(personnel3);
}
tree.setCellRenderer(new TreeRenderer());
//tree.setToggleClickCount(10);
tree.addSelectionInterval(1, 10);
tree.setVisibleRowCount(10);
tree.setFont(new Font("SansSerif", Font.PLAIN, 12));
for (int i = 0; i < tree.getRowCount(); i++)
{
tree.expandRow(i);
}
return tree;
}
/**
* 创建节点的图标志
* 〈功能详细描述〉
* @param path 图标路径
* @return 图标对象
* @exception/throws N/A
*/
private static ImageIcon createImageIcon(String path)
{
java.net.URL imgURL = imagepath.class.getResource(path);
if (imgURL != null)
{
//System.out.println("url==" + imgURL);
return new ImageIcon(imgURL);
}
else
{
System.err.println("Couldn't find file: " + path);
return null;
}
}
//Tree render
private static class TreeRenderer
extends DefaultTreeCellRenderer
{
ImageIcon foldercIcon = createImageIcon("images/folderc.jpg");
ImageIcon folderoIcon = createImageIcon("images/foldero.jpg");
ImageIcon treeIcon = createImageIcon("images/tree.jpg");
ImageIcon managerIcon = createImageIcon("images/manager.jpg");
ImageIcon personnelIcon = createImageIcon("images/personnel.jpg");
ImageIcon cfoIcon = createImageIcon("images/cfo.jpg");
public TreeRenderer()
{
if (foldercIcon != null && folderoIcon != null)
{
setIcon(treeIcon);
setClosedIcon(foldercIcon);
setOpenIcon(folderoIcon);
}
}
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);
setText(value.toString());
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
String str = value.toString();
if (str.equals("总经理"))
{
setLeafIcon(managerIcon );
}
else if (str.equals("财务部长"))
{
setLeafIcon(cfoIcon );
}
else
{
setLeafIcon(personnelIcon);
}
return this;
}
}
}
查了下,大概应该是这么写,但是运行结果有问题,鼠标点节点的时候老是乱变,不知为什么,哪个高手指教一下,感激不尽!!!
import javax.swing.*;
import javax.swing.tree.*;
public class MenuTree
{
protected static final int filiale1= CONSTANT + 1;
protected static final int filiale2= CONSTANT + 2;
public MenuTree()
{
}
/**
* Description :构造面版节点树
* @param dept部门名
* @param
* @return tree
*/
public static JTree MenuTree(int dept)
{
DefaultMutableTreeNode group = new DefaultMutableTreeNode("集团");
JTree tree = new JTree(group);
if (dept=="filiale1")
{
DefaultMutableTreeNode company= new DefaultMutableTreeNode("分公司");
group.add(manager);
DefaultMutableTreeNode manager= new DefaultMutableTreeNode("总经理");
company.add(manager);
DefaultMutableTreeNode cfo= new DefaultMutableTreeNode("财务部长");
company.add(cfo);
DefaultMutableTreeNode personnel1= new DefaultMutableTreeNode("职员");
company.add(personnel1);
DefaultMutableTreeNode personnel2= new DefaultMutableTreeNode("职员");
company.add(personnel2);
DefaultMutableTreeNode personnel3= new DefaultMutableTreeNode("职员");
company.add(personnel3);
}
tree.setCellRenderer(new TreeRenderer());
//tree.setToggleClickCount(10);
tree.addSelectionInterval(1, 10);
tree.setVisibleRowCount(10);
tree.setFont(new Font("SansSerif", Font.PLAIN, 12));
for (int i = 0; i < tree.getRowCount(); i++)
{
tree.expandRow(i);
}
return tree;
}
/**
* 创建节点的图标志
* 〈功能详细描述〉
* @param path 图标路径
* @return 图标对象
* @exception/throws N/A
*/
private static ImageIcon createImageIcon(String path)
{
java.net.URL imgURL = imagepath.class.getResource(path);
if (imgURL != null)
{
//System.out.println("url==" + imgURL);
return new ImageIcon(imgURL);
}
else
{
System.err.println("Couldn't find file: " + path);
return null;
}
}
//Tree render
private static class TreeRenderer
extends DefaultTreeCellRenderer
{
ImageIcon foldercIcon = createImageIcon("images/folderc.jpg");
ImageIcon folderoIcon = createImageIcon("images/foldero.jpg");
ImageIcon treeIcon = createImageIcon("images/tree.jpg");
ImageIcon managerIcon = createImageIcon("images/manager.jpg");
ImageIcon personnelIcon = createImageIcon("images/personnel.jpg");
ImageIcon cfoIcon = createImageIcon("images/cfo.jpg");
public TreeRenderer()
{
if (foldercIcon != null && folderoIcon != null)
{
setIcon(treeIcon);
setClosedIcon(foldercIcon);
setOpenIcon(folderoIcon);
}
}
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);
setText(value.toString());
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
String str = value.toString();
if (str.equals("总经理"))
{
setLeafIcon(managerIcon );
}
else if (str.equals("财务部长"))
{
setLeafIcon(cfoIcon );
}
else
{
setLeafIcon(personnelIcon);
}
return this;
}
}
}
查了下,大概应该是这么写,但是运行结果有问题,鼠标点节点的时候老是乱变,不知为什么,哪个高手指教一下,感激不尽!!!
boolean sel, boolean expanded,
boolean leaf, int row,
boolean hasFocus)
{
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf,
row,
hasFocus);
if (leaf) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
String str = value.toString();
if (str.equals("总经理"))
{
setIcon(managerIcon );
}
else if (str.equals("财务部长"))
{
setIcon(cfoIcon );
}
else
{
setIcon(personnelIcon);
} }else{
if (expanded){
setIcon(folderoIcon);
}else{
setIcon(foldercIcon);
}
}
setText(value.toString());
return this;
}
}
}
if (str.equals("总经理"))
{
setLeafIcon(managerIcon );
}
else if (str.equals("财务部长"))
{
setLeafIcon(cfoIcon );
}
else
{
setLeafIcon(personnelIcon);
}
這個得问题。setLeafIcon(cfoIcon ); 是设置叶结点的图标的。。你想一下就明白了。