public void push(B b){//既你所谓的add,堆栈中用push添加 _stack.add(b); }
public B pop(){ //堆栈弹出一个对象,并删除 B tmp = (B)_stack.get(_stack.size() - 1); _stack.remove(_stack.size() - 1); return tmp; } }
public class B {
public static int totals; //当前所有的B的个数,用于获取最后一个,注意是全局变量 private Vector _stack; //堆栈 int layer = 1; //层(默认为1) private int position; //标示第几个添加到B中的,用于获取最后一个
public B(){ _stack = new Vector(); }
public void setLayer(int l){ // this.layer = l; }
/** * 获取该B的层次 * @return */ public int getLayer(){ return this.layer; }
/** * 添加一个B * @param stackObj */ public void addChild(B stackObj){ _stack.add(stackObj); stackObj.setLayer(this.getLayer() + 1); position = ++totals;
}
public Vector getStack(){ return _stack; }
public int getCount(){ return _stack.size(); }
/** * 获取某一层的最后一个节点,并删除 * @param layer * @return */ public B pop(int layer){ int i = 0; B tmp ; Vector parent = null; B rtn = this; while(i < layer){ parent = rtn.getStack(); tmp = (B)parent.get(rtn.getCount() - 1); rtn = tmp; i++; } parent.remove(rtn); return rtn; }
/** * 获取某一层的最后一个节点,不删除 * @param layer * @return */ public B getChild(int layer){ int i = 0; B tmp ; B rtn = this; while(i < layer){ tmp = (B)rtn.getStack().get(rtn.getCount() - 1); rtn = tmp; i++; } return rtn; }
/** * 返回最后添加的B */ public B getLastChild(){ //遍例所有B,查找b的position == totals //然后totals--,(假设添加了16个B,获取最后一个并删除后,那么第15个添加的就成了最后一个) //未实现,呵呵有点晚了 return null; }
/** * 树形化这个堆栈的结构,方便view * @return */ public JTree buildTree(){ DefaultMutableTreeNode root = new DefaultMutableTreeNode(); for(int i=0 ; i <_stack.size(); i++){ B b = (B)_stack.get(i); DefaultMutableTreeNode node = new DefaultMutableTreeNode(b); root.add(node); parseStackTOTreeNode(node, b); } return new JTree(root); }
private void parseStackTOTreeNode(DefaultMutableTreeNode node, B b){ Vector stack = b.getStack(); if(null == stack ¦ ¦ stack.isEmpty()){ return; } for(int i=0; i <stack.size(); i++){ B tmp = (B)stack.get(i); DefaultMutableTreeNode tmpNode = new DefaultMutableTreeNode(tmp); node.add(tmpNode); parseStackTOTreeNode(tmpNode, tmp); } }
public static void main(String[] args){ B b = new B();//生成b b.addChild(new B()); b.addChild(new B());
B layer1 = b.getChild(1); layer1.addChild(new B()); layer1.addChild(new B());
B layer2 = b.getChild(2); layer2.addChild(new B()); layer2.addChild(new B());
B obj = b.pop(2);
A a = new A(); a.push(obj);
//看一看结果吧 JFrame f = new JFrame(); f.getContentPane().add(b.buildTree()); f.setSize(300,400); f.setVisible(true); } }