1 31 32 package org.opencms.util.ant; 33 34 import java.awt.Component ; 35 import java.awt.Dimension ; 36 import java.awt.event.WindowAdapter ; 37 import java.awt.event.WindowEvent ; 38 39 import javax.swing.BoxLayout ; 40 import javax.swing.JCheckBox ; 41 import javax.swing.JComponent ; 42 import javax.swing.JFrame ; 43 import javax.swing.JLabel ; 44 import javax.swing.JTree ; 45 import javax.swing.UIManager ; 46 import javax.swing.event.TreeSelectionEvent ; 47 import javax.swing.event.TreeSelectionListener ; 48 import javax.swing.tree.DefaultMutableTreeNode ; 49 import javax.swing.tree.DefaultTreeCellRenderer ; 50 import javax.swing.tree.DefaultTreeModel ; 51 import javax.swing.tree.TreeCellRenderer ; 52 import javax.swing.tree.TreePath ; 53 import javax.swing.tree.TreeSelectionModel ; 54 55 72 public class SelectionTree extends JTree { 73 74 86 class CheckBoxCellRenderer extends DefaultTreeCellRenderer { 87 88 89 private static final long serialVersionUID = -4329469376335457482L; 90 91 96 public Component getTreeCellRendererComponent( 97 JTree tree, 98 Object value, 99 boolean isSelected, 100 boolean expanded, 101 boolean leaf, 102 int row, 103 boolean focus) { 104 105 super.getTreeCellRendererComponent(tree, value, isSelected, expanded, leaf, row, focus); 106 return new TreeCellUI((DefaultMutableTreeNode )value, selected); 107 } 108 } 109 110 126 class SubsequentSelection implements TreeSelectionListener { 127 128 131 public void valueChanged(TreeSelectionEvent e) { 132 133 SelectionTree.this.clearToggledPaths(); 137 138 } 139 } 140 141 153 class TreeCellUI extends JComponent { 154 155 156 private static final long serialVersionUID = -1315044645298979088L; 157 158 159 private JCheckBox m_checkBox; 160 161 169 public TreeCellUI(DefaultMutableTreeNode node, boolean selected) { 170 171 JLabel label = new JLabel (); 172 label.setText(node.getUserObject().toString()); 173 this.m_checkBox = new JCheckBox (); 174 this.m_checkBox.setSelected(selected || this.searchSelected(node)); 175 this.setLayout(new BoxLayout (this, BoxLayout.X_AXIS)); 176 this.add(this.m_checkBox); 177 this.add(label); 178 m_checkBox.setBackground(UIManager.getLookAndFeel().getDefaults().getColor("window")); 179 } 181 182 private boolean searchSelected(DefaultMutableTreeNode node) { 183 184 DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode )SelectionTree.this.getLastSelectedPathComponent(); 185 if (selectedNode == null) { 186 return false; 187 } 188 return (selectedNode.isNodeDescendant(node)); 189 } 190 } 191 192 193 private static final long serialVersionUID = -3627379509871776708L; 194 195 198 public SelectionTree() { 199 200 super(); 201 super.setCellRenderer(new CheckBoxCellRenderer()); 202 this.selectionModel.setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION); 203 this.selectionModel.addTreeSelectionListener(new SubsequentSelection()); 204 } 206 207 213 public static void main(String [] args) { 214 215 DefaultMutableTreeNode node = new DefaultMutableTreeNode ("root"); 216 DefaultMutableTreeNode a = new DefaultMutableTreeNode ("a"); 217 DefaultMutableTreeNode b = new DefaultMutableTreeNode ("b"); 218 DefaultMutableTreeNode c = new DefaultMutableTreeNode ("c"); 219 DefaultMutableTreeNode a1 = new DefaultMutableTreeNode ("1"); 220 DefaultMutableTreeNode a2 = new DefaultMutableTreeNode ("2"); 221 DefaultMutableTreeNode a3 = new DefaultMutableTreeNode ("3"); 222 DefaultMutableTreeNode b1 = new DefaultMutableTreeNode ("1"); 223 DefaultMutableTreeNode b2 = new DefaultMutableTreeNode ("2"); 224 DefaultMutableTreeNode b3 = new DefaultMutableTreeNode ("3"); 225 DefaultMutableTreeNode c1 = new DefaultMutableTreeNode ("1"); 226 DefaultMutableTreeNode c2 = new DefaultMutableTreeNode ("2"); 227 DefaultMutableTreeNode c3 = new DefaultMutableTreeNode ("3"); 228 229 node.add(a); 230 node.add(b); 231 node.add(c); 232 a.add(a1); 233 a.add(a2); 234 a.add(a3); 235 b.add(b1); 236 b.add(b2); 237 b.add(b3); 238 c.add(c1); 239 c.add(c2); 240 c.add(c3); 241 242 JFrame frame = new JFrame ("SelectionTree"); 243 SelectionTree tree = new SelectionTree(); 244 tree.setModel(new DefaultTreeModel (node)); 245 frame.getContentPane().add(tree); 246 frame.setSize(new Dimension (200, 800)); 247 frame.addWindowListener(new WindowAdapter () { 248 249 public void windowClosing(WindowEvent we) { 250 251 System.exit(0); 252 } 253 }); 254 frame.setVisible(true); 255 256 } 257 258 261 public void clearToggledPaths() { 262 263 super.clearToggledPaths(); 265 } 266 267 271 public void removeSelectionPath(TreePath path) { 272 273 super.removeSelectionPath(path); 275 } 278 279 283 public void setCellRenderer(TreeCellRenderer x) { 284 285 } 287 288 291 public void setSelectionPath(TreePath path) { 292 293 super.setSelectionPath(path); 294 this.clearToggledPaths(); 295 } 296 297 } 298 | Popular Tags |