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
package com.vci.client.ui.tree;
 
import java.awt.BorderLayout;
import java.awt.Component;
 
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.TreePath;
 
import com.vci.client.ui.swing.CheckBoxLabel;
 
public class CheckBoxTreeCellRenderer extends JPanel implements TreeCellRenderer{
 
    /**
     * 
     */
    private static final long serialVersionUID = -167967084338672613L;
    private CheckBoxTreeSelectionModel selectionModel;
    private CheckBoxLabel label = new CheckBoxLabel();
    private TreeCellRenderer delegate; 
    
    public CheckBoxTreeCellRenderer(TreeCellRenderer delegate, CheckBoxTreeSelectionModel selectionModel) {
        this.delegate = delegate;
        this.selectionModel = selectionModel;
        setLayout(new BorderLayout()); 
        setOpaque(false); 
        label.setOpaque(false); 
    }
    
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, 
            boolean expanded, boolean leaf, int row, boolean hasFocus) {
        Component renderer = delegate.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); 
        TreePath path = tree.getPathForRow(row);
        if(path!=null){ 
            if(selectionModel.isPathSelected(path, true)) {
                label.setState(CheckBoxLabel.SELECTED);
            } else {
                label.setState(selectionModel.isPartiallySelected(path) ? null : CheckBoxLabel.NOT_SELECTED); 
            }
        }
        removeAll(); 
        add(label, BorderLayout.WEST); 
        add(renderer, BorderLayout.CENTER);
        return this;
    }
}