龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

Java中轻松实现界面跳转(2)

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
为了优化这种情形,彻底解决这个问题,我想应该设计一个第三方类来消除这种依赖性,并且让界面跳转不要这么费劲。这个第三方的类是这样设计的: 在这个

  为了优化这种情形,彻底解决这个问题,我想应该设计一个第三方类来消除这种依赖性,并且让界面跳转不要这么费劲。这个第三方的类是这样设计的:

  在这个类中,必须有一个变量来保存某一个界面跳转的路径,如A->B->C.路径一旦被保存,你就拥有了控制显示任何一个界面的权利了。在这个链中,第一个位置的界面应该是这次跳转的第一站,最后一个位置是当前站。这里存在一个因果关系:只有跳转了才可以跳回去。这样使得我们可以用数组来保存这个路径。现实中,跳转的情形应该不会超过10次,所以我们把路径长度设为10(当然你可以根据需要更改)。这个类的样子大概象这样:

  class ViewPath{
  JPanel[] pnlPath = null; //跳转的界面路径,界面跳转最大10个层次吧!!!
  int index = 0; //路径中的当前下标
  BaseView bsView = null; //当前路径所在的同一个View

  //在路径中寻找目标的方法
  public int find(JPanel pnl){ //该路径下是否有某个Panel,有的话返回下标,没有的话返回-1
  if(bsView==null) return -1; //没有初始化,该路径下没有任何Panel
  for(int i=0;i  if(pnl==pnlPath[i]){
   index = i;
   return i; //如果找到了则返回位置,并且把当前位置设为目标位置
  }
  }
  return -1; //没有找到,返回-1
  }

  //构造函数
  ViewPath(JPanel myPanel,BaseView myView){
  pnlPath = new JPanel[10]; //设置路径最大长度为10

  bsView = myView; //设置该路径所属的那个View
  pnlPath[0] = myPanel; //设立起始站
  index = 0; //设立起始站索引
  }
  }

  这样一个类就完成了保存一次跳转路径的作用.(当然,是否应该在find方法中设立目标位置是否合适有待商榷)

  那么我们如何使用这样一个路径?

  我们设立一个辅助类来完成这个工作,我们命名为ViewJump,我们知道作为辅助的类最好是不要有实例,特别是象这样的起接口作用的类,只提供静态方法.它的框架象这样:

  public class ViewJump{
  private static ViewPath[] viewPath = null; //路径池,系统多处使用,静态但私有,因为供内部用

  private ViewJump(){} //私有构造方法,辅助类只提供静态方法
  private static int find(JPanel pnl); //寻找给定的Panel是否在已有路径中,私有
  private static int newPath(JPanel myPanel,BaseView myView); //建立一个新路径,私有
  /**
  * 每个类需要使用该辅助类时都需要第一步注册自己,然后才能做其他操作
  * 返回一个注册码id,辅助类需要使用这个注册码进行其他操作
  */
  public static int registerPath(JPanel myPanel,BaseView myView);
  /**
  * 设立下一个界面.
  */
  public static void setNext(int id,JPanel aim);
  /**
  * 回到上一个界面
  */
  public static void back(int id);
  /**
  * 回到第一个界面
  */
  public static void backHome(int id);
  /**
  * 跳转到下一个界面
  */
  public static void jump(int id);
  }

  完成这样一个类的代码量并不多,一百多行,但是却使得用户完全脱离了处理不同界面的烦恼.稍后会把该类的源码附上,值得一提的是,这个类的实现固然可以用到类似的实现当中,但是如果用户的界面结构并不是如此搭建,你就需要更改参数类型了.如果能把这些抽象出来,得到一个抽象类或接口,参数用Object类型.用户根据自己的需要去实现这些方法,岂不妙哉!

精彩图集

赞助商链接