package com.vci.client.uif.engine.client.compare.dialog.renderer; import java.awt.Color; import java.awt.Component; import java.awt.Font; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import com.vci.client.uif.engine.client.compare.dialog.treenode.TreeNodeObject; import com.vci.client.uif.engine.client.compare.enumeration.CompareState; /** * 版本比较树单元格渲染器 * @author VCI-STGK006 * */ public class CompareTreeCellRenderer extends DefaultTreeCellRenderer { private static final long serialVersionUID = 8393197719527584042L; /** * 构造器 */ public CompareTreeCellRenderer() { super(); } @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { //需要在调用父方法前重新设置字体颜色 try { DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; Object userObject = node.getUserObject(); if(userObject instanceof TreeNodeObject) { TreeNodeObject dtn = (TreeNodeObject) userObject; if(dtn.isRoot()) { //根节点 this.setTextNonSelectionColor(Color.BLACK); this.setTextSelectionColor(Color.BLACK); } else if(dtn.getCompareState() == CompareState.SAME) { //节点信息一致 this.setTextNonSelectionColor(Color.black); this.setTextSelectionColor(Color.black); } else if(dtn.getCompareState() == CompareState.ISNULL) { //虚节点 this.setTextNonSelectionColor(Color.LIGHT_GRAY); this.setTextSelectionColor(Color.LIGHT_GRAY); } else if(dtn.getCompareState() == CompareState.DIFFERENT) { //信息不一致,包括节点和关系信息不一致 this.setTextNonSelectionColor(Color.RED); this.setTextSelectionColor(Color.RED); } else if(dtn.getCompareState() == CompareState.DIFFERENT_NORELATION) { //节点存在但是与上级没有关系 this.setTextNonSelectionColor(Color.BLUE); this.setTextSelectionColor(Color.BLUE); } else if(dtn.getCompareState() == CompareState.DIFFERENT_INFO) { //属性信息不一致 this.setTextNonSelectionColor(Color.RED); this.setTextSelectionColor(Color.RED); } else { //按正常情况处理 this.setTextNonSelectionColor(Color.BLACK); this.setTextSelectionColor(Color.BLACK); } } } catch (Exception e) { e.printStackTrace(); } Component c = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); //需要在设置父方法后重新设置图标样式 try { DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; Object userObject = node.getUserObject(); if(userObject instanceof TreeNodeObject) { TreeNodeObject dtn = (TreeNodeObject) userObject; if(dtn.isRoot()) { //根节点 setIcon(CompareTreeNodeIcons.getInstance().ROOT); } else if(dtn.getCompareState() == CompareState.SAME) { //节点信息一致 if(leaf) { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_SAME_ISLEAF); } else if(expanded) { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_SAME_FOLDER_EXPANDED); } else { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_SAME_FOLDER_COLLAPSED); } } else if(dtn.getCompareState() == CompareState.ISNULL) { //虚节点 if(leaf) { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_ISNULL_ISLEAF); } else if(expanded) { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_ISNULL_FOLDER_EXPANDED); } else { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_ISNULL_FOLDER_COLLAPSED); } } else if(dtn.getCompareState() == CompareState.DIFFERENT) { //信息不一致,包括节点和关系信息不一致 if(leaf) { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_DIFFERENT_ISLEAF); } else if(expanded) { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_DIFFERENT_FOLDER_EXPANDED); } else { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_DIFFERENT_FOLDER_COLLAPSED); } } else if(dtn.getCompareState() == CompareState.DIFFERENT_NORELATION) { //节点存在但是与上级没有关系 if(leaf) { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_DIFFERENT_NORELATION_ISLEAF); } else if(expanded) { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_DIFFERENT_NORELATION_FOLDER_EXPANDED); } else { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_DIFFERENT_NORELATION_FOLDER_COLLAPSED); } } else if(dtn.getCompareState() == CompareState.DIFFERENT_INFO) { //属性信息不一致 if(leaf) { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_DIFFERENT_INFO_ISLEAF); } else if(expanded) { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_DIFFERENT_INFO_FOLDER_EXPANDED); } else { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_DIFFERENT_INFO_FOLDER_COLLAPSED); } } else { //按正常情况处理 if(leaf) { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_SAME_ISLEAF); } else if(expanded) { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_SAME_FOLDER_EXPANDED); } else { setIcon(CompareTreeNodeIcons.getInstance().COMPARE_SAME_FOLDER_COLLAPSED); } } } } catch (Exception e) { e.printStackTrace(); } return c; } }