<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    當柳上原的風吹向天際的時候...

    真正的快樂來源于創(chuàng)造

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks

    1.1 創(chuàng)建樹組件
    1.1.1 最簡方式

        JTree tree = new JTree();

        在顯示時,樹組件會帶上JTree默認的節(jié)點。

    1.1.2 指定樹的節(jié)點后創(chuàng)建樹:   

        DefaultMutableTreeNode root = new DefaultMutableTreeNode("根節(jié)點");
        root.add(
    new DefaultMutableTreeNode("子節(jié)點"));    
        JTree tree 
    = new JTree(root);


    1.1.3 將樹加入到面板中
        以下是將樹加上滾動窗格后加入一個面板的示例程序。    

       JPanel panel=new JPanel();
       panel.setLayout(
    new GridLayout(1,1));
       panel.add(
    new JScrollPane(tree));

       
    1.2 樹節(jié)點相關
    1.2.1 取得樹的根節(jié)點

        DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
        DefaultMutableTreeNode root 
    =(DefaultMutableTreeNode)model.getRoot();

    1.2.2 更新樹的根節(jié)點

        DefaultMutableTreeNode newRoot=;
        DefaultTreeModel model 
    = (DefaultTreeModel) tree.getModel();
        model.setRoot(newRoot);
        model.reload();  
        tree.updateUI();


    1.2.3 從一個節(jié)點開始遞歸遍歷其下的所有節(jié)點

    private String getNodeText(DefaultMutableTreeNode node){
       Category category
    =(Category)node.getUserObject();
       StringBuilder sb
    =new StringBuilder(category.getText());
      
      
    if (node.getChildCount() >= 0) {
                
    for (Enumeration<?> e=node.children(); e.hasMoreElements(); ) {
                 DefaultMutableTreeNode childNode 
    = (DefaultMutableTreeNode)e.nextElement();
                    sb.append(getNodeText(childNode));
                }
            }
      
      
    return sb.toString();
    }


    1.2.4 在某節(jié)點下創(chuàng)建一個節(jié)點

        DefaultMutableTreeNode childNode = new DefaultMutableTreeNode();
        childNode.setUserObject();
        parentNode.add(childNode);

    1.2.5 節(jié)點改名  

        Category selectedCategory=(Category)clickedNode.getUserObject();
        selectedCategory.setName(
    "");
        clickedNode.setUserObject(selectedCategory);

     

    1.2.6 刪除節(jié)點   

        DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
        model.removeNodeFromParent(clickedNode);

        注意被刪除的節(jié)點必須有父節(jié)點,若要刪除根節(jié)點直接用null去替代原有根節(jié)點即可,

    1.2.7 遍歷用戶選擇的樹節(jié)點   

        TreePath[] paths = tree.getSelectionPaths();
       
        
    for(TreePath selPath:paths){
            Object[] nodes 
    = selPath.getPath();
      
            DefaultMutableTreeNode node 
    = (DefaultMutableTreeNode) nodes[nodes.length - 1];  
            
    // 對node進行處理
        }

     

    1.3 樹的事件處理
    1.3.1 左鍵點擊事件處理
       

       tree.addMouseListener(new MouseAdapter() {
          
    public void mousePressed(MouseEvent e) {
            
    int selRow = tree.getRowForLocation(e.getX(), e.getY());// 返回節(jié)點所在的行,-1表示鼠標定位不在顯示的單元邊界內(nèi)
            TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());// 返回指定節(jié)點的樹路徑
       
            
    boolean condition = true;
            condition 
    = condition && (selRow != -1);// 如果選中
            
    //condition = condition && (e.getButton() == 1);// 左鍵 e.getButton() == 1  右鍵  e.getButton() == 3
            condition = condition && (e.getClickCount() == 1);// 單擊
           
       
            
    // 如果是左鍵點擊
            if (condition == true && (e.getButton() == 1)) {
              Object[] nodes 
    = selPath.getPath();
             
              DefaultMutableTreeNode node 
    = (DefaultMutableTreeNode) nodes[nodes.length - 1];
              Category selectedCategory
    =(Category)node.getUserObject();
       
            }
          }
        });

     

    1.3.2 在樹節(jié)點上點擊右鍵彈出右鍵菜單 

       tree.addMouseListener(new MouseAdapter() {
          
    public void mousePressed(MouseEvent e) {
            
    int selRow = tree.getRowForLocation(e.getX(), e.getY());// 返回節(jié)點所在的行,-1表示鼠標定位不在顯示的單元邊界內(nèi)
            TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());// 返回指定節(jié)點的樹路徑

            
    boolean condition = true;
            condition 
    = condition && (selRow != -1);// 如果選中
            condition = condition && (e.getClickCount() == 1);// 單擊
           
            
    // 如果是右鍵點擊
            if(condition == true && (e.getButton() == 3)){
             
              Object[] nodes 
    = selPath.getPath();
              DefaultMutableTreeNode rightClickedNode 
    = (DefaultMutableTreeNode) nodes[nodes.length - 1];
              
              popupMenu.show(e.getComponent(), e.getX(), e.getY());
            }
          }
        });

     

    1.4 樹的渲染
    1.4.1 樹節(jié)點渲染器示例
     

      public class CategoryNodeRenderer extends DefaultTreeCellRenderer{
        
    private static final long serialVersionUID = 8532405600839140757L;
       
        
    private static final ImageIcon categoryLeafIcon = new ImageIcon(CategoryNodeRenderer.class.getResource("/categoryLeaf.gif"));
        
    private static final ImageIcon openFolderIcon = new ImageIcon(CategoryNodeRenderer.class.getResource("/openFolder.gif"));
        
    private static final ImageIcon closedFolderIcon = new ImageIcon(CategoryNodeRenderer.class.getResource("/closedFolder.gif"));
       
        
    public Component getTreeCellRendererComponent(JTree tree,
                                                  Object value,
                                                  
    boolean sel,
                                                  
    boolean expanded,
                                                  
    boolean leaf,
                                                  
    int row,
                                                  
    boolean hasFocus){
         
          
    super.getTreeCellRendererComponent(tree,  
                      value,
                      sel,  
                      expanded,  
                      leaf,  
                      row,  
                      hasFocus);  
         
          
    if(leaf){
            setIcon(categoryLeafIcon);
          }
          
    else if(expanded){
            setIcon(openFolderIcon);
          }
          
    else{
            setIcon(closedFolderIcon);
          }
             
          
    return this;   
        }
      }

     

    1.4.2 用樹節(jié)點渲染器渲染一棵樹 

      DefaultMutableTreeNode root = null;
      JTree tree 
    = new JTree(root);
      tree.setCellRenderer(
    new CategoryNodeRenderer());

     

    posted on 2010-01-14 15:13 何楊 閱讀(1272) 評論(0)  編輯  收藏
    主站蜘蛛池模板: 国产成人精品免费直播| 91九色视频无限观看免费| 日本特黄特色免费大片| 亚洲人成网国产最新在线| 亚洲一区二区三区免费观看| 久久精品a亚洲国产v高清不卡 | 亚洲激情在线观看| 久久国产乱子免费精品| 亚洲第一精品在线视频| 精品一区二区三区无码免费视频| 亚洲国产精品成人精品无码区| 男人进去女人爽免费视频国产| 久久精品国产亚洲AV麻豆王友容| 日韩精品无码免费专区网站| 久久亚洲精品成人综合| 精品一区二区三区免费毛片爱 | 18女人腿打开无遮掩免费| 亚洲精品韩国美女在线| 色播在线永久免费视频| 国产亚洲精品91| 中文字幕不卡亚洲 | 在线视频免费国产成人| 亚洲第一成年免费网站| 国产精品亚洲一区二区三区| 久久久久久久久免费看无码| 亚洲一级毛片在线播放| 在线天堂免费观看.WWW | 亚洲av无码一区二区三区人妖 | 亚洲免费视频播放| 91亚洲性爱在线视频| 国产91免费在线观看| 亚洲人成www在线播放| 最近免费中文字幕4| 亚洲AV第一成肉网| 免费二级毛片免费完整视频| 亚洲精品免费在线观看| 猫咪免费人成网站在线观看| 亚洲欧洲日本在线观看| 免费国产成人午夜电影| 免费一级毛片在线播放视频免费观看永久 | www.亚洲精品|