wangting
2024-09-27 a3e87f78ee262ca9bb7d9b0c997639d5f3295890
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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;
    }
}