隐藏树节点

原创 2007年09月13日 11:29:00
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(); 
  }
 
}
 

相关文章推荐

前端开发树节点PC端

  • 2017年05月19日 11:33
  • 96KB
  • 下载

根据输入的关键字过滤ext树节点

  • 2014年07月21日 11:53
  • 21KB
  • 下载

面试算法:利用链表层级打印二叉树节点

二叉树节点的变量有三种方法,分别是前序遍历,中序遍历,后续遍历。现在,要求我们实现算法,使得逐层将节点打印出来,例如开始先打印最高层,也就是节点5,然后打印第二层,也就是节点3, 7, 接着打印第三层...

WPF-Win8树节点效果-源码

  • 2014年03月26日 11:07
  • 52KB
  • 下载

读取数据库 动态生成树节点

  • 2010年04月08日 15:27
  • 163KB
  • 下载

ext的树节点操作常用属性

ext 树节点的一些常用操作 1、全部展开 tree.expandAll(); 2、全部收缩 tree.collapseAll(); 3、得到父节点 node.parentN...
  • LDBZXD
  • LDBZXD
  • 2016年03月17日 16:21
  • 2216

C#三层结构搜素树节点

  • 2013年05月23日 14:49
  • 59KB
  • 下载

二叉树节点计算器1.2测试版

  • 2012年06月23日 19:51
  • 6KB
  • 下载

算法习题39:二叉树节点距离

网易有道笔试: (1). 求一个二叉树中任意两个节点间的最大距离, 两个节点的距离的定义是 这两个节点间边的个数, 比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空...
  • ylf13
  • ylf13
  • 2013年11月01日 14:56
  • 537
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:隐藏树节点
举报原因:
原因补充:

(最多只允许输入30个字)