这篇文章是在文章三的基础上进行编写的,可以先看下文章三,然后再看此篇文章。
除了使用默认的DefaultTreeCellRenderer 类进行创建并设置选中节点高亮的样式,还可以自己进行创建一个类继承实现DefaultTreeCellRenderer类,在类里可以实现icon的自定义以及对应的需求。
代码如下:
首先要根据截图进行注解,并添加上下面代码:(其中jTree是前面几篇文章中创建得到的JTree对象)
jTree.setCellRenderer(new SetIconForJtree());
public class SetJtreeIcon extends DefaultTreeCellRenderer {
private static final long serialVersionUID = 1L;
ImageIcon userIcon = null;
String str = null;
JLabel label = new JLabel();
DefaultTreeCellRenderer renderer;
private String key;
public SetJtreeIcon() {
}
public boolean isInt(String str) {
try {
Integer.parseInt(str);
return true;
} catch (NumberFormatException e) {
return false;
}
}
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
System.out.println(tree);
// System.out.println(value);
// System.out.println(selected);
// System.out.println(expanded);
// System.out.println(leaf);
// System.out.println(row);
// System.out.println(hasFocus);
if (node == null)
return null;
String[] nodeArr = node.toString().split(":");
if (selected) {
label.setOpaque(false);//设置该组件边缘像素不可编辑
label.setForeground(Color.blue);
label.setBackground(getBackgroundSelectionColor());
} else {
label.setOpaque(true);
label.setBackground(getBackgroundNonSelectionColor());
label.setForeground(getTextNonSelectionColor());
}
if (node.getChildCount() != 0) {
userIcon = new ImageIcon("你自己的图片路径位置xxxxxx/element.png");
str = node.toString();
label.setIcon(userIcon);
label.setText(str);
return label;
}
userIcon = new ImageIcon("你自己的图片路径位置xxxxxx/attr.png");
str = node.toString();
label.setIcon(userIcon);
label.setText(str);
return label;
}
得到的效果图如下: