亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? selectiontree.java

?? cms是開源的框架
?? JAVA
字號:
/*
 * File   : $Source: /usr/local/cvs/opencms/src-components/org/opencms/util/ant/SelectionTree.java,v $
 * Date   : $Date: 2006/03/27 14:53:01 $
 * Version: $Revision: 1.3 $
 *
 * This library is part of OpenCms -
 * the Open Source Content Mananagement System
 *
 * Copyright (c) 2005 Alkacon Software GmbH (http://www.alkacon.com)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * For further information about Alkacon Software GmbH, please see the
 * company website: http://www.alkacon.com
 *
 * For further information about OpenCms, please see the
 * project website: http://www.opencms.org
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package org.opencms.util.ant;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;

/**
 * A proprietary {@link javax.swing.JTree} utilization for visuals checkbox selection.
 * <p>
 * 
 * It displays a tree with:
 * <ul>
 * <li> Multiple node selection (windos Look and Feel: press STRG) </li>
 * <li> Subsequent selection on the UI: it appears that all subnodes of a node are selected too</li>
 * <li>{@link javax.swing.tree.TreeSelectionModel#DISCONTIGUOUS_TREE_SELECTION} </li>
 * <li> Custom node UI with checkboxes. </li>
 * </ul>
 * 
 * @author Achim Westermann
 * 
 * @version $Revision: 1.3 $
 * 
 */
public class SelectionTree extends JTree {

    /**
     * 
     * Custom cell renderer that displays a checkbox.
     * <p>
     * 
     * @author Achim Westermann
     * 
     * @version $Revision: 1.3 $
     * 
     * @since 6.1.6
     * 
     */
    class CheckBoxCellRenderer extends DefaultTreeCellRenderer {

        /** Generated servial version UID. * */
        private static final long serialVersionUID = -4329469376335457482L;

        /**
         * 
         * @see javax.swing.tree.TreeCellRenderer#getTreeCellRendererComponent(javax.swing.JTree,
         *      java.lang.Object, boolean, boolean, boolean, int, boolean)
         */
        public Component getTreeCellRendererComponent(
            JTree tree,
            Object value,
            boolean isSelected,
            boolean expanded,
            boolean leaf,
            int row,
            boolean focus) {

            super.getTreeCellRendererComponent(tree, value, isSelected, expanded, leaf, row, focus);
            return new TreeCellUI((DefaultMutableTreeNode)value, selected);
        }
    }

    /**
     * 
     * {@link TreeSelectionListener} that clears the selections on toggeled paths.
     * <p>
     * 
     * This is only needed because of the proprietary UI - display of selected subnodes that are not
     * selected within the tree model itself.
     * <p>
     * 
     * @author Achim Westermann
     * 
     * @version $Revision: 1.3 $
     * 
     * @since 6.1.6
     * 
     */
    class SubsequentSelection implements TreeSelectionListener {

        /**
         * @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent)
         */
        public void valueChanged(TreeSelectionEvent e) {

            // DefaultMutableTreeNode node =
            // (DefaultMutableTreeNode)SelectionTree.this.getLastSelectedPathComponent();
            // clear the old subselections:
            SelectionTree.this.clearToggledPaths();

        }
    }

    /**
     * 
     * Custom component containing the default tree cell component along with a checkbox.
     * <p>
     * 
     * @author Achim Westermann
     * 
     * @version $Revision: 1.3 $
     * 
     * @since 6.1.6
     * 
     */
    class TreeCellUI extends JComponent {

        /** Generated serial version UID. * */
        private static final long serialVersionUID = -1315044645298979088L;

        /** The checkbox to use. * */
        private JCheckBox m_checkBox;

        /**
         * Constructor with the corresponding tree node and the selection flag.
         * <p>
         * 
         * @param node the corresponding tree node.
         * 
         * @param selected flag that specifies the state of the internal checkbox to show.
         */
        public TreeCellUI(DefaultMutableTreeNode node, boolean selected) {

            JLabel label = new JLabel();
            label.setText(node.getUserObject().toString());
            this.m_checkBox = new JCheckBox();
            this.m_checkBox.setSelected(selected || this.searchSelected(node));
            this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
            this.add(this.m_checkBox);
            this.add(label);
            m_checkBox.setBackground(UIManager.getLookAndFeel().getDefaults().getColor("window"));
            // invalidate all subnodes:
        }

        private boolean searchSelected(DefaultMutableTreeNode node) {

            DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)SelectionTree.this.getLastSelectedPathComponent();
            if (selectedNode == null) {
                return false;
            }
            return (selectedNode.isNodeDescendant(node));
        }
    }

    /** Generated serial version UID. * */
    private static final long serialVersionUID = -3627379509871776708L;

    /**
     * Defcon.
     */
    public SelectionTree() {

        super();
        super.setCellRenderer(new CheckBoxCellRenderer());
        this.selectionModel.setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
        this.selectionModel.addTreeSelectionListener(new SubsequentSelection());
        // this.setShowsRootHandles(false);
    }

    /**
     * For testing purposes.
     * <p>
     * 
     * @param args unused command line args.
     */
    public static void main(String[] args) {

        DefaultMutableTreeNode node = new DefaultMutableTreeNode("root");
        DefaultMutableTreeNode a = new DefaultMutableTreeNode("a");
        DefaultMutableTreeNode b = new DefaultMutableTreeNode("b");
        DefaultMutableTreeNode c = new DefaultMutableTreeNode("c");
        DefaultMutableTreeNode a1 = new DefaultMutableTreeNode("1");
        DefaultMutableTreeNode a2 = new DefaultMutableTreeNode("2");
        DefaultMutableTreeNode a3 = new DefaultMutableTreeNode("3");
        DefaultMutableTreeNode b1 = new DefaultMutableTreeNode("1");
        DefaultMutableTreeNode b2 = new DefaultMutableTreeNode("2");
        DefaultMutableTreeNode b3 = new DefaultMutableTreeNode("3");
        DefaultMutableTreeNode c1 = new DefaultMutableTreeNode("1");
        DefaultMutableTreeNode c2 = new DefaultMutableTreeNode("2");
        DefaultMutableTreeNode c3 = new DefaultMutableTreeNode("3");

        node.add(a);
        node.add(b);
        node.add(c);
        a.add(a1);
        a.add(a2);
        a.add(a3);
        b.add(b1);
        b.add(b2);
        b.add(b3);
        c.add(c1);
        c.add(c2);
        c.add(c3);

        JFrame frame = new JFrame("SelectionTree");
        SelectionTree tree = new SelectionTree();
        tree.setModel(new DefaultTreeModel(node));
        frame.getContentPane().add(tree);
        frame.setSize(new Dimension(200, 800));
        frame.addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent we) {

                System.exit(0);
            }
        });
        frame.setVisible(true);

    }

    /**
     * @see javax.swing.JTree#clearToggledPaths()
     */
    public void clearToggledPaths() {

        // TODO: Auto-generated method stub
        super.clearToggledPaths();
    }

    /**
     * 
     * @see javax.swing.JTree#removeSelectionPath(javax.swing.tree.TreePath)
     */
    public void removeSelectionPath(TreePath path) {

        // unselect the current TreeCell:
        super.removeSelectionPath(path);
        // unselect the TreeCell rendererer checkboxes in subsequent entries:
        // this.clearToggledPaths();
    }

    /**
     * 
     * @see javax.swing.JTree#setCellRenderer(javax.swing.tree.TreeCellRenderer)
     */
    public void setCellRenderer(TreeCellRenderer x) {

        // nop
    }

    /**
     * @see javax.swing.JTree#setSelectionPath(javax.swing.tree.TreePath)
     */
    public void setSelectionPath(TreePath path) {

        super.setSelectionPath(path);
        this.clearToggledPaths();
    }

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品麻豆视频| 久久狠狠亚洲综合| 六月丁香综合在线视频| www.欧美.com| 国产亚洲一区二区在线观看| 亚洲一区二区三区四区在线观看| 国产综合一区二区| 7777精品久久久大香线蕉| 国产精品久久久久影院亚瑟| 国产一区亚洲一区| 91精品啪在线观看国产60岁| 一区二区三区在线播| 国v精品久久久网| 精品区一区二区| 人禽交欧美网站| 欧美影院一区二区三区| 亚洲视频你懂的| voyeur盗摄精品| 国产精品系列在线| 国产精品影视在线| 26uuu国产电影一区二区| 免费精品99久久国产综合精品| 欧美色倩网站大全免费| 亚洲精品国产a久久久久久| 色综合久久天天| 亚洲欧洲综合另类| 91在线码无精品| 亚洲人精品午夜| 91在线看国产| 亚洲欧美日韩精品久久久久| 91小视频在线观看| 一区二区三区四区精品在线视频| 97se亚洲国产综合自在线观| 亚洲欧洲精品成人久久奇米网| av亚洲精华国产精华精华| 国产精品区一区二区三区| av一区二区三区| 一区二区三区四区不卡在线| 色成人在线视频| 亚洲成av人影院在线观看网| 欧美一区二区三区系列电影| 日韩不卡一区二区三区| 日韩一区二区免费在线电影| 国产一区二区在线观看免费| 久久精子c满五个校花| av电影一区二区| 悠悠色在线精品| 51午夜精品国产| 国模套图日韩精品一区二区| 国产精品女主播av| 在线免费不卡电影| 日日夜夜精品视频天天综合网| 日韩一区二区三| 成人爽a毛片一区二区免费| 亚洲欧美区自拍先锋| 在线综合+亚洲+欧美中文字幕| 国内精品视频一区二区三区八戒| 欧美国产精品v| 欧美日韩一区中文字幕| 精品一区二区三区香蕉蜜桃| 国产精品免费人成网站| 欧美亚洲综合在线| 国产一区二区美女| 一区二区三区不卡视频在线观看| 91精品免费在线| 大美女一区二区三区| 午夜av电影一区| 国产三级精品在线| 欧美日韩一区久久| 国产成人免费高清| 日韩二区三区四区| 国产精品亲子乱子伦xxxx裸| 欧美一区二区三区人| 成人黄色软件下载| 久久狠狠亚洲综合| 亚洲国产精品久久人人爱| 国产婷婷色一区二区三区| 欧美无乱码久久久免费午夜一区| 国产一区二区久久| 午夜成人免费视频| 亚洲精品国产a| 亚洲国产精品精华液ab| 日韩欧美综合在线| 色综合视频在线观看| 国产suv精品一区二区883| 肉肉av福利一精品导航| 亚洲精品v日韩精品| 国产情人综合久久777777| 欧美一级日韩一级| 91国产福利在线| 成人午夜看片网址| 国内精品在线播放| 麻豆国产精品777777在线| 亚洲一二三级电影| 亚洲欧美日本在线| 综合久久久久久久| 国产精品久久久久精k8| 久久久久久免费| 精品国一区二区三区| 欧美精品在线一区二区| 欧洲精品视频在线观看| 色综合网站在线| 99精品一区二区三区| 99久久综合99久久综合网站| 丁香网亚洲国际| 成人一区二区三区| 成人国产精品免费观看视频| 国产成人小视频| 国产乱码精品一区二区三 | 美女精品一区二区| 性做久久久久久久免费看| 亚洲欧美日韩中文字幕一区二区三区| 国产精品麻豆欧美日韩ww| 国产精品美女一区二区三区 | 91在线视频免费91| 成人福利视频网站| 9i看片成人免费高清| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 欧美视频精品在线观看| 欧美亚洲愉拍一区二区| 欧美日韩在线播放三区| 91麻豆精品国产91| 日韩视频免费观看高清完整版| 欧美一级二级在线观看| 日韩美女主播在线视频一区二区三区| 日韩久久精品一区| 国产片一区二区| 亚洲色图色小说| 午夜在线电影亚洲一区| 久久av资源网| 99视频一区二区| 欧美系列在线观看| 欧美一区二区三区四区在线观看| 精品少妇一区二区三区日产乱码 | 三级欧美在线一区| 国精产品一区一区三区mba桃花| 国产黄色91视频| 在线观看视频一区二区| 欧美变态口味重另类| 国产精品久久久久一区| 天使萌一区二区三区免费观看| 国产综合一区二区| 在线影院国内精品| 日韩久久免费av| 亚洲视频免费在线观看| 麻豆精品在线视频| 97精品视频在线观看自产线路二| 欧美日韩国产经典色站一区二区三区| 欧美va亚洲va| 亚洲欧美一区二区三区久本道91| 男人的天堂久久精品| 成人高清视频在线观看| 欧美酷刑日本凌虐凌虐| 日本一区二区免费在线观看视频| 一区二区三区欧美久久| 国产精品888| 欧美日韩国产一级二级| 国产日韩欧美电影| 日韩精品五月天| 99久精品国产| 久久久久久亚洲综合| 日韩高清不卡在线| 在线视频一区二区三| 国产日产欧产精品推荐色| 日韩国产精品大片| 一本大道久久a久久综合| 久久久精品国产免费观看同学| 亚洲一区二区欧美日韩| caoporen国产精品视频| 久久婷婷色综合| 免费成人你懂的| 欧美日韩aaaaa| 亚洲乱码一区二区三区在线观看| 国产激情视频一区二区在线观看| 7777精品伊人久久久大香线蕉经典版下载 | 婷婷中文字幕综合| www.日韩在线| 久久精品一区二区| 蜜桃av噜噜一区| 欧美日韩亚洲综合一区二区三区| 亚洲视频在线观看一区| 高清成人免费视频| 久久夜色精品国产欧美乱极品| 免费在线一区观看| 欧美精品欧美精品系列| 亚洲综合精品自拍| 色婷婷久久久综合中文字幕| 亚洲视频你懂的| 91浏览器打开| 亚洲精品老司机| 91久久线看在观草草青青| 亚洲日本韩国一区| 色综合天天综合狠狠| 一区二区三区日韩在线观看| av中文字幕不卡| 亚洲猫色日本管| 精品视频一区 二区 三区| 亚洲国产一区在线观看| 欧美日韩久久一区| 免费美女久久99|