隐藏树节点

本文介绍了一个使用Java Swing实现的动态过滤树模型示例。该示例通过自定义树节点来展示如何根据条件显示或隐藏特定类型的节点。具体实现包括自定义节点类型如PlainBelliedSneech和StarBelliedSneech,并且通过FilteredTreeModel控制StarBelliedSneech类型的节点是否可见。
import javax.swing.JTree; 
import javax.swing.JScrollPane; 
import javax.swing.JOptionPane; 
import javax.swing.JCheckBox; 
import javax.swing.JPanel; 
import javax.swing.tree.TreePath; 
import javax.swing.tree.DefaultTreeModel; 
import javax.swing.tree.DefaultMutableTreeNode; 
import java.awt.Dimension; 
import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Enumeration; 

class FilteredTree 

  
private class PlainBelliedSneech 
    
public String toString() return "Plain Bellied Sneech"; } 
  }
 

  
private class StarBelliedSneech 
    
public String toString() return "Star Bellied Sneech"; } 
  }
 

  
private class FilteredTreeModel 
    
extends DefaultTreeModel 
  

    
private boolean mShowStarBelliedSneeches= true
    
private DefaultMutableTreeNode mRoot; 

    FilteredTreeModel(DefaultMutableTreeNode root) 
    

      
super(root); 
      mRoot
= root; 
    }
 

    
public Object getChild(Object parent, int index) 
    

      DefaultMutableTreeNode node
= 
        (DefaultMutableTreeNode) parent; 

      
if (mShowStarBelliedSneeches) 
        
return node.getChildAt(index); 
       
      
int pos= 0
      
for (int i= 0, cnt= 0; i< node.getChildCount(); i++
        
if (((DefaultMutableTreeNode) node.getChildAt(i)).getUserObject() 
                
instanceof PlainBelliedSneech) 
        

          
if (cnt++ == index) 
            pos
= i; 
            
break
          }
 
        }
 
      }
 

      
return node.getChildAt(pos); 
    }
 

    
public int getChildCount(Object parent) 
    

      DefaultMutableTreeNode node
= 
        (DefaultMutableTreeNode) parent; 

      
if (mShowStarBelliedSneeches) 
        
return node.getChildCount(); 

      
int childCount= 0
      Enumeration children
= node.children(); 
      
while (children.hasMoreElements()) 
        
if (((DefaultMutableTreeNode) children.nextElement()).getUserObject() 
                
instanceof PlainBelliedSneech) 
          childCount
++
      }
 

      
return childCount; 
    }
 

    
public boolean getShowStarBelliedSneeches() 
      
return mShowStarBelliedSneeches; 
    }
 

    
public void setShowStarBelliedSneeches(boolean showStarBelliedSneeches) 
    

      
if (showStarBelliedSneeches != mShowStarBelliedSneeches) 
        mShowStarBelliedSneeches
= showStarBelliedSneeches; 
        Object[] path
= { mRoot }
        
int[] childIndices= new int[root.getChildCount()]; 
        Object[] children
= new Object[root.getChildCount()]; 
        
for (int i= 0; i< root.getChildCount(); i++
          childIndices[i]
= i; 
          children[i]
= root.getChildAt(i); 
        }
 
        fireTreeStructureChanged(
this, path, childIndices, children); 

      }
 
    }
 
  }
 

  
private FilteredTree() 
  

    
final DefaultMutableTreeNode root= new DefaultMutableTreeNode("Root"); 

    DefaultMutableTreeNode parent; 
    DefaultMutableTreeNode child; 

    
for (int i= 0; i< 2; i++
      parent
= new DefaultMutableTreeNode(new PlainBelliedSneech()); 
      root.add(parent); 
      
for (int j= 0; j< 2; j++
        child
= new DefaultMutableTreeNode(new StarBelliedSneech()); 
        parent.add(child); 
        
for (int k= 0; k< 2; k++
          child.add(
new DefaultMutableTreeNode(new PlainBelliedSneech())); 
      }
 
      
for (int j= 0; j< 2; j++
        parent.add(
new DefaultMutableTreeNode(new PlainBelliedSneech())); 

      parent
= new DefaultMutableTreeNode(new StarBelliedSneech()); 
      root.add(parent); 
      
for (int j= 0; j< 2; j++
        child
= new DefaultMutableTreeNode(new PlainBelliedSneech()); 
        parent.add(child); 
        
for (int k= 0; k< 2; k++
          child.add(
new DefaultMutableTreeNode(new StarBelliedSneech())); 
      }
 
      
for (int j= 0; j< 2; j++
        parent.add(
new DefaultMutableTreeNode(new StarBelliedSneech())); 

    }
 

    
final FilteredTreeModel model= new FilteredTreeModel(root); 
    JTree tree
= new JTree(model); 
tree.setShowsRootHandles(
true); 
tree.putClientProperty(
"JTree.lineStyle""Angled"); 
    tree.setRootVisible(
false); 

    JScrollPane sp
= new JScrollPane(tree); 
    sp.setPreferredSize(
new Dimension(200,400)); 

    
final JCheckBox check= new JCheckBox("Show Star Bellied Sneeches"); 
    check.setSelected(model.getShowStarBelliedSneeches()); 

    check.addActionListener(
new ActionListener() 
      
public void actionPerformed(ActionEvent e) 
        model.setShowStarBelliedSneeches(check.isSelected()); 
      }
 
    }
); 

    JPanel panel
= new JPanel(new BorderLayout()); 
    panel.add(check, BorderLayout.NORTH); 
    panel.add(sp, BorderLayout.CENTER); 

    JOptionPane.showOptionDialog( 
      
null, panel, "Sneeches on Beeches"
      JOptionPane.DEFAULT_OPTION, 
      JOptionPane.PLAIN_MESSAGE, 
      
nullnew String[0], null 
    ); 

    System.exit(
0); 
  }
 

  
public static void main(String[] argv) 
    
new FilteredTree(); 
  }
 
}
 
Element UI是一套基于Vue.js的UI组件库,提供了丰富的组件和功能,其中也包括了树形组件(Tree)。要设置树节点隐藏,可以通过以下步骤实现: 1. 首先,确保已经正确引入Element UI库和相关组件。 2. 在Vue组件中,使用`<el-tree>`标签创建树形组件,并绑定数据源。 3. 在数据源中,为每个节点添加一个`visible`属性,用于控制节点的显示与隐藏。可以在初始化数据时设置所有节点的`visible`为`true`。 4. 在树形组件中,使用`node-key`属性指定节点的唯一标识字段。 5. 使用`scoped slot`来自定义节点的显示方式。在`<el-tree>`标签内部,使用`<template slot-scope="scope">`来定义节点的显示内容。 6. 在自定义节点的显示内容中,使用`v-if`或者`v-show`指令来根据节点的`visible`属性控制节点的显示与隐藏。 下面是一个示例代码: ```html <template> <div> <el-tree :data="treeData" :node-key="nodeKey"> <template slot-scope="scope"> <span v-if="scope.node.visible">{{ scope.node.label }}</span> </template> </el-tree> </div> </template> <script> export default { data() { return { treeData: [ { label: '节点1', visible: true, children: [ { label: '子节点1', visible: true }, { label: '子节点2', visible: false } ] }, { label: '节点2', visible: true } ], nodeKey: 'label' }; } }; </script> ``` 在上述示例中,树形组件的每个节点都有一个`visible`属性,通过该属性来控制节点的显示与隐藏。在自定义节点的显示内容中,使用`v-if`指令来判断节点的`visible`属性,只有当`visible`为`true`时才显示节点。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值