首页 > 代码库 > Jtree (节点的渲染+资源管理器)
Jtree (节点的渲染+资源管理器)
我们的还是自定义的Jtree的类:
package jtree.customNode;import java.io.File;import javax.swing.JTree;import javax.swing.tree.DefaultTreeModel;import util.ImageManager;import jtree.checkBoxTree.CheckBoxTreeNodeListender;public class ZTreeCusNode extends JTree { private static final long serialVersionUID = -581164150235777786L; private static final String ROOT_NAME = "我的电脑"; private static final int levelUp = 3; public ZTreeCusNode() { this.setModel(new DefaultTreeModel(createRootNode())); this.setCellRenderer(new CusNodeTreeCellRender()); this.addCheckSelectListender(); } private void addCheckSelectListender() { this.addMouseListener(new CheckBoxTreeNodeListender(this)); } public CusTreeNode createRootNode(){ CusTreeNode treeNode = null; CusTreeNode rootNode = new CusTreeNode(ROOT_NAME,ImageManager.getImageIconByShortName("home.png")); for(int i = 0; i < File.listRoots().length ; i++){ if(File.listRoots()[i].isDirectory()){ String rootPath = File.listRoots()[i].getPath(); treeNode = creatDefaultMutableTreeNode(rootPath,0); rootNode.add(treeNode); treeNode = null; } } return rootNode; } private CusTreeNode creatDefaultMutableTreeNode(String nodePath,int level) { CusTreeNode node = null; if(level == 0){ node = new CusTreeNode(nodePath,ImageManager.getImageIconByShortName("pan.png")); }else if(level == 1){ node = new CusTreeNode(nodePath,ImageManager.getImageIconByShortName("ff.png")); }else{ node = new CusTreeNode(nodePath); } CusTreeNode treeNode = null; level = level+1; File file = new File(nodePath); if(file.isDirectory() && file.listFiles() != null){ for(int i = 0; i < file.listFiles().length && level < levelUp; i++){ if(file.listFiles()[i].isDirectory()){ String rootPath = file.listFiles()[i].getPath(); treeNode = creatDefaultMutableTreeNode(rootPath,level); node.add(treeNode); treeNode = null; } } } return node; }}
但是因为各个节点的图标,可能比一样,我们把图标的信息集合到节点中去,这样的话,可以根据条件给不同的节点设置不同的节点,显示的时候,直接从节点中取出来即可,根据这种分析,我们需要自定义DefaultMutableTreeNode 。
package jtree.customNode;import javax.swing.Icon;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.TreeSelectionModel;public class CusTreeNode extends DefaultMutableTreeNode { private static final long serialVersionUID = 3311434895405929201L; private boolean isSelected = false; private boolean enabled = false; private boolean isVisible = false; private Icon icon = null; private String iconName = null; private int selectionMode = 0; public CusTreeNode(Object userObject,Icon icon) { this(userObject, true, false, true, true, icon); } public CusTreeNode(String nodePath) { this(nodePath, true, false, true, true, null); } public CusTreeNode(Object userObject, boolean allowsChildren, boolean isSelected, boolean enabled, boolean isVisible, Icon icon) { super(userObject, allowsChildren); this.isSelected = isSelected; this.enabled = enabled; this.isVisible = isVisible; this.icon = icon; setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION); } public boolean isSelected() { return isSelected; } public void setSelected(boolean isSelected) { this.isSelected = isSelected; } public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public boolean isVisible() { return isVisible; } public void setVisible(boolean isVisible) { this.isVisible = isVisible; } public Icon getIcon() { return icon; } public void setIcon(Icon icon) { this.icon = icon; } public String getIconName() { return iconName; } public void setIconName(String iconName) { this.iconName = iconName; } public int getSelectionMode() { return selectionMode; } public void setSelectionMode(int selectionMode) { this.selectionMode = selectionMode; } }
然后是节点的渲染如下:
package jtree.customNode;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.Dimension;import javax.swing.Icon;import javax.swing.JPanel;import javax.swing.JTree;import javax.swing.UIManager;import javax.swing.plaf.ColorUIResource;import javax.swing.tree.TreeCellRenderer;import jtree.checkBoxTree.CheckBoxTreeLabel;public class CusNodeTreeCellRender extends JPanel implements TreeCellRenderer { private static final long serialVersionUID = 4676667399191240255L; protected CheckBoxTreeLabel label; // protected JLabel label; public CusNodeTreeCellRender() { setLayout(new BorderLayout()); add(label = new CheckBoxTreeLabel()); // add(label = new JLabel()); label.setForeground(UIManager.getColor("Tree.textForeground")); this.setPreferredSize(new Dimension(100, 20)); } /* * (non-Javadoc) * * @see * javax.swing.tree.TreeCellRenderer#getTreeCellRendererComponent(javax. * swing.JTree, java.lang.Object, boolean, boolean, boolean, int, boolean) */ @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { String stringValue = tree.convertValueToText(value, selected, expanded, leaf, row, hasFocus); boolean nodeIsEnabled = ((CusTreeNode) value).isEnabled(); setEnabled(nodeIsEnabled); label.setFont(tree.getFont()); label.setText(stringValue); label.setSelected(selected); label.setFocus(hasFocus); if (leaf) label.setIcon(UIManager.getIcon("Tree.leafIcon")); else if (expanded) label.setIcon(UIManager.getIcon("Tree.openIcon")); else{ label.setIcon(UIManager.getIcon("Tree.closedIcon")); } Icon icon = ((CusTreeNode) value).getIcon(); if(icon != null){ label.setIcon(icon); } return this; } @Override public void setBackground(Color color) { if (color instanceof ColorUIResource) color = null; super.setBackground(color); }}
测试代码:
public class TestZTreeCusNode { /** * @param args */ public static void main(String[] args) { ZTreeCusNode tree = new ZTreeCusNode(); JScrollPane scroll = new JScrollPane(tree); //测试的环境 JFrame test = new JFrame(); test.setSize(450, 330); test.setLocation((test.getToolkit().getScreenSize().width - 450) / 2, (test.getToolkit().getScreenSize().height - 330) / 2); test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); test.add(scroll); test.setVisible(true); }}
Jtree (节点的渲染+资源管理器)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。