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; } }