Java中轻松实现界面跳转(3)
使用这个类,你可以简便的多的完成诸如上面的任务:
OneView中:
public void jump(){
MyView myView = new MyView();
int id = ViewJump.registerPath(this.xxPanel,this);
ViewJump.setNext(id,myView.getPanel());
ViewJump.jump(id);
}
MyView中退回的部分:
protected void goBack(){
int id = ViewJump.registerPath(this.myPanel,this);
ViewJump.back(id);
}
天哪,这并不神奇,600行代码仅仅用了两行就实现了!
好了,我就说这么多了,一切都掌握在你手中,用你的智慧来优化我们的冗余代码吧,因为这样它看起来相当不错.
附:完整代码:(我把ViewPath类放在同一个文件ViewJump.java里,代码上面已经给出)
public class ViewJump{
private static ViewPath[] viewPath = null;
//私有构造函数
private ViewJump(){}
//寻找该Panel是不是在路径中
/**
* 找到了返回在实例数组中的下标
* 没有找到返回-1
* @param pnl
* @return
*/
private static int find(JPanel pnl){
// System.out.println("执行find() in ViewJump");
if(viewPath == null || viewPath.length==0) return -1;
for(int i = 0;i ViewPath vp = viewPath[i]; //对该路径检查
if(vp.find(pnl) != -1){
return i;
}
}
return -1;
}
//建立一个新的路径
/**
*
* @param myPanel
* @param myView
*/
private static int newPath(JPanel myPanel,BaseView myView){
System.out.println("执行newPath() in ViewJump");
//检验一下看有没有无效的路径,有则清除
if(viewPath == null || viewPath.length==0) {
viewPath = new ViewPath[]{new ViewPath(myPanel,myView)};
return 0;
}
ViewPath[] vjArr = new ViewPath[viewPath.length];
int count = 0;
for(int i = 0;i if(viewPath[i].bsView!=null){ //把不为空的值取出来
vjArr[count++] = viewPath[i];
}
}
viewPath = new ViewPath[count+1];
System.arraycopy(viewPath,0,vjArr,0,count); //复制到原来的数组变量中
//最后一个位置留给新加入的元素
viewPath[count] = new ViewPath(myPanel,myView);
return count;
}
- 上一篇:Java语言接口与继承的本质
- 下一篇:基于Java的解释器设计模式[图]