Java中轻松实现界面跳转(4)
//获得实例的方法
/**
* 必须检查该Panel是不是已经在路径中了,如果在路径中,
* 则返回注册的编号,用此编号扁可以访问到正确的类型了
* 如果不在路径中,则以此为开始新建一个新的路径
* 本来检查路径的时候没有必要检查路径的第一个元素,
* 因为一个元素不可能是开端,但是为了防止用户连续两次registerPath的错误
* 请把第一个元素也给检查一下
* myView 参数只有当该界面为跳转的起始点时才需要,否则保持原始的View
* @param me
* @param other
* 返回实例数组的下标,
*/
public static int registerPath(JPanel myPanel,BaseView myView){
System.out.println("执行registerPath() in ViewJump");
int idx = find(myPanel);
System.out.println("idx="+idx);
if(idx==-1){ //返回-1表示没有找到,建立一个新的路径
System.out.println("新建一个路径");
idx = newPath(myPanel,myView);
}
System.out.println("执行完注册路径..");
return idx; //返回实例下标
}
//设定要跳转的下一个目标
public static void setNext(int id,JPanel aim){
if(id<0||id>=viewPath.length){
return;
}
ViewPath vp = viewPath[id];
//设定目标,从这里看,这是存在安全漏洞的,如果使用者乱传递id进来的话
JPanel[] path = vp.pnlPath;
path[vp.index+1] = aim;
}
//回到上一个
public static void back(int id){
if(id<0||id>=viewPath.length){
return;
}
ViewPath vp = viewPath[id];
//回到上一个界面
if(vp.index>0){ //只有当前面有路径时才作
vp.bsView.remove(vp.pnlPath[vp.index]); //移去当前的
vp.index--; //游标往前走一步
vp.bsView.add(vp.pnlPath[vp.index],BorderLayout.CENTER); //增加当前的到界面
vp.bsView.validate();
vp.bsView.repaint();
}
}
//回到起源处
public static void backHome(int id){
if(id<0||id>=viewPath.length){
return;
}
ViewPath vp = viewPath[id];
//直接回到第一步,需要清除该路径吗?中途断裂怎么办?办法是检查View是否已为空
//选择不清除,每次在建立新的路径时,检查路径是不是已经无效了
vp.bsView.remove(vp.pnlPath[vp.index]); //移去当前的
vp.index = 0; //游标往前走一步
vp.bsView.add(vp.pnlPath[vp.index],BorderLayout.CENTER); //增加当前的到界面
vp.bsView.validate();
vp.bsView.repaint();
}
//跳转到下一处
public static void jump(int id){
if(id<0||id>=viewPath.length){
return;
}
ViewPath vp = viewPath[id];
if(vp.pnlPath[vp.index+1]==null){
return; //下一步根本没有设置
}
vp.bsView.remove(vp.pnlPath[vp.index]); //移去当前的
vp.index++;
vp.bsView.add(vp.pnlPath[vp.index],BorderLayout.CENTER);
vp.bsView.validate();
vp.bsView.repaint();
}
}
- 上一篇:Java语言接口与继承的本质
- 下一篇:基于Java的解释器设计模式[图]