Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
   *
   * The contents of this file are subject to the terms of either the GNU
   * General Public License Version 2 only ("GPL") or the Common
   * Development and Distribution License("CDDL") (collectively, the
   * "License"). You may not use this file except in compliance with the
  * License. You can obtain a copy of the License at
  * http://www.netbeans.org/cddl-gplv2.html
  * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
  * specific language governing permissions and limitations under the
  * License.  When distributing the software, include this License Header
  * Notice in each file and include the License file at
  * nbbuild/licenses/CDDL-GPL-2-CP.  Sun designates this
  * particular file as subject to the "Classpath" exception as provided
  * by Sun in the GPL Version 2 section of the License file that
  * accompanied this code. If applicable, add the following below the
  * License Header, with the fields enclosed by brackets [] replaced by
  * your own identifying information:
  * "Portions Copyrighted [year] [name of copyright owner]"
  *
  * If you wish your version of this file to be governed by only the CDDL
  * or only the GPL Version 2, indicate your decision by adding
  * "[Contributor] elects to include this software in this distribution
  * under the [CDDL or GPL Version 2] license." If you do not indicate a
  * single choice of license, a recipient has the option to distribute
  * your version of this file under either the CDDL, the GPL Version 2 or
  * to extend the choice of license to its licensees as provided above.
  * However, if you add GPL Version 2 code and therefore, elected the GPL
  * Version 2 license, then the option applies only if the new code is
  * made subject to such option by the copyright holder.
  *
  * Contributor(s):
  *
  * Portions Copyrighted 2009 Sun Microsystems, Inc.
  */
 
 package org.netbeans.modules.kenai.ui.treelist;
 
 import java.awt.Color;
 import java.awt.Point;
List with expandable/collapsible rows.

Author(s):
S. Aubrecht
 
 public class TreeList extends JList {
 
     static final int INSETS_TOP = 3;
     static final int INSETS_BOTTOM = 3;
     static final int INSETS_LEFT = 4;
     static final int INSETS_RIGHT = 4;

    
Action key for right-arrow expansion of property sets
 
     private static final String ACTION_EXPAND = "expandSet"//NOI18N
 
    
Action key for left-arrow closing of property sets
 
     private static final String ACTION_COLLAPSE = "collapseSet"//NOI18N
 
    
Action key for invoking the custom editor
 
     private static final String ACTION_DEFAULT = "invokeDefaultAction"//NOI18N
 
     private Action expandAction;
     private Action collapseAction;
     private Action defaultAction;
 
     private final TreeListRenderer renderer = new TreeListRenderer();
 
     static final int ROW_HEIGHT = Math.max( 16, Math.max(RendererPanel.getExpandedIcon().getIconHeight(), new JLabel("X").getPreferredSize().++) ); // NOI18N
 
     public TreeListTreeListModel model ) {
         supermodel );
         setFixedCellHeight+2 );
         setCellRenderer();
         setBackground(ColorManager.getDefault().getDefaultBackground());
        addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                ife.getClickCount() != 2 || e.isPopupTrigger() )
                    return;
                int index = locationToIndex(e.getPoint());
                ifindex < 0 || index >= getModel().getSize() )
                    return;
                Object value = getModel().getElementAt(index);
                ifvalue instanceof TreeListNode ) {
                    TreeListNode node = (TreeListNodevalue;
                    ifnull != node && !node.isExpandable() ) {
                        ActionListener al = node.getDefaultAction();
                        ifnull != al )
                            al.actionPerformed(new ActionEvent(e.getSource(), e.getID(), e.paramString()));
                    }
                }
            }
        });
    }
    @Override
    public void setUI(ListUI ui) {
        super.setUI(new TreeListUI());
    }
    @Override
    public void updateUI() {
        super.updateUI();
        initKeysAndActions();
    }

    
Right-arrow key expands a row, left-arrow collapses a row, enter invokes row's default action (if any).
    private void initKeysAndActions() {
        unregisterKeyboardAction(KeyStroke.getKeyStroke(., 0));
         = new ExpandAction();
         = new CollapseAction();
         = new DefaultAction();
        InputMap imp = getInputMap();
        ActionMap am = getActionMap();
        imp.put(KeyStroke.getKeyStroke(., 0), );
        imp.put(KeyStroke.getKeyStroke(., 0), );
        imp.put(KeyStroke.getKeyStroke(., 0), );
        impAncestor.remove(KeyStroke.getKeyStroke(., 0));
        impAncestor.remove(KeyStroke.getKeyStroke(., 0));
        impAncestor.remove(KeyStroke.getKeyStroke(., 0));
        am.put();
        am.put();
        am.put();
    }
        Object sel = super.getSelectedValue();
        ifsel instanceof TreeListNode ) {
            return (TreeListNodesel;
        }
        return null;
    }

    
Show popup menu from actions provided by node at given index (if any).

Parameters:
rowIndex
location
    void showPopupMenuAtint rowIndexPoint location ) {
        TreeListNode node = (TreeListNodegetModel().getElementAt(rowIndex);
        Action[] actions = node.getPopupActions();
        ifnull == actions || actions.length == 0 )
            return;
        setSelectedIndex(rowIndex);
        JPopupMenu popup = Utilities.actionsToPopup(actionsthis);
        popup.show(thislocation.xlocation.y);
    }
    private static class TreeListRenderer implements ListCellRenderer {
        public Component getListCellRendererComponent(JList listObject valueint indexboolean isSelectedboolean cellHasFocus) {
            if( !(value instanceof TreeListNode) ) {
                //shoudln't happen
                return new JLabel();
            }
            TreeListNode node = (TreeListNodevalue;
            int rowHeight = list.getFixedCellHeight();
            Color background = isSelected ? list.getSelectionBackground() : list.getBackground();
            Color foreground = isSelected ? list.getSelectionForeground() : list.getForeground();
            return node.getRenderer(foregroundbackgroundisSelectedcellHasFocusrowHeight);
        }
    }
    //*************Actions bound to the keyboard ******************
    private class ExpandAction extends AbstractAction {
        public ExpandAction() {
            super();
        }
        public void actionPerformed(ActionEvent ae) {
            TreeListNode node = getSelectedTreeListNode();
            ifnull != node && node.isExpandable() )
                node.setExpanded(true);
        }
        @Override
        public boolean isEnabled() {
            TreeListNode node = getSelectedTreeListNode();
            return null != node && node.isExpandable();
        }
    }
    private class CollapseAction extends AbstractAction {
        public CollapseAction() {
            super();
        }
        public void actionPerformed(ActionEvent ae) {
            TreeListNode node = getSelectedTreeListNode();
            ifnull != node && node.isExpandable() )
                node.setExpanded(false);
        }
        @Override
        public boolean isEnabled() {
            TreeListNode node = getSelectedTreeListNode();
            return null != node && node.isExpandable();
        }
    }
    private class DefaultAction extends AbstractAction {
        public DefaultAction() {
            super();
        }
        public void actionPerformed(ActionEvent ae) {
            TreeListNode node = getSelectedTreeListNode();
            ifnull != node ) {
                ActionListener al = node.getDefaultAction();
                ifnull != al )
                    al.actionPerformed(ae);
            }
        }
        @Override
        public boolean isEnabled() {
            TreeListNode node = getSelectedTreeListNode();
            return null != node && null != node.getDefaultAction();
        }
    }
New to GrepCode? Check out our FAQ X