首 页 ┆ 源码下载 ┆ IT学院 ┆ 字体下载 ┆ 模板下载 ┆ 源码发布 ┆ 广告合作 ┆ 网站地图 ┆ 虚拟主机 ┆ 中文域名
► 设为首页
► 加入收藏
► 联系我们
源码下载 >> ASP源码 | PHP源码 | ASP.net源码 | JSP源码 | CGI源码 | VC/C++源码 | VB源码 | Delphi源码 | Flash源码
文章学院 >> 网络编程 | 网页设计 | 图形图象 | 数据库 | 服务器 | 网络媒体 | 网络安全 | 操作系统 | 办公软件 | 软件开发 | 黑客知识
字体下载 >> 精制字体 | 非英字体 | 艺术字体 | 著名字体 | 哥特式 | 简单字体 | 手写体 | 节假日 | 图案字体 | 精度像素 | 中文字体
模板下载 >> 企业门户 | 数码网络 | 休闲娱乐 | 影视音乐 | 旅游名胜 | 文化艺术 | 电子商务 | 个性展示 | 登陆导航 | Flash模板
►►您当前的位置:源码园 → IT学院 → 软件开发 → Java编程 → 文章内容

Java中轻松实现界面跳转

作者:jiziba  来源:网上收集  发布时间:2005-11-15 10:24:33
  假设这样一种情况,我们的系统的界面使用javax.swing包构建,界面的基础是BaseView,他是一个容器,当然他应当提供获取控件元素的功能,比如得到按钮,下拉框,表格等,当然仅仅是一个容器而已,而我们的界面的元素全部部署在JPanel上。

  描述为:

  一个界面就是一个BaseView,他只包含一个JPanel,这个包含JPanel包含所有我们的Swing控件,例如JButton,JLable等等。

  问题出现了:我们通常因为业务的需要完成一个界面的操作要自动跳转到下一个界面,完成下一个界面又能跳回来(题外话:由于我们的操作是基于GUI的,所以往往能保存Session信息,而Web却做不到),而这往往成为系统实现过程中效率低下的一个因素,我就见到我现在的系统中有人用600行代码判断上一个界面应该是哪一个来跳转过来,因为很多界面都可以跳到当前界面。

  当然有一种做法是,在下一个界面类中包含指向上一个界面的变量,我们说,这不方便,也增加了依赖性,这对软件是不利的。

  接下来,我给出我的解决方法,希望对采用这种界面结构的朋友有所裨益。

  (以下全部用简化模型来讲述.)

  1.简单点,我们假设BaseView继承JWindow,当然可以是别的容器(依据你的实现),大概象这样:

  public abstract class BaseView extends JWindow{
  ...
  (实现一些取得界面控件,和界面信息的方法).
  }


  2.每个界面类都象这样定义:

  public class MyView extends BaseView{
  JPanel myPanel;
  public void playoutPanel(){
  JButton myButton = new JButton("OK");
  myPanel.add(myButton);
  ......
  (添加你需要的控件和布局到myPanel上)
  }
  }

  3.假设有其他的界面OneView,TwoView,ThreeView处理完操作后都需要跳转到myView,在myView中的ok按钮按下的时候需要回到原始界面。

  原来臃肿的代码需要在myView中添加一个变量BaseView anyView;用来存放转来的那个界面anyView,赋值在三者中的跳转代码中引用myView来设定.跳转代码象这样:

  public void jump(){
  MyView myView = new MyView();
  myView.anyView = this;
  this.remove(this.xxPanel);
  this.add(myView.getPanel());
  this.repaint();
  }

  看起来还不错,虽然需要引用MyView类,并调用他的变量和方法.但是跳转回来却不那么容易,否则怎么会用600行!

  大概象这样:(这已经是被我简化的)

  public void goBack(){
  if(anyView instanceof OneView){
  anyView.remove(this.myView);
  OneView ov = (OneView)anyView;
  anyView.add(ov.getPanel());
  anyView.repaint();
  }
  if(anyView instanceof TwoView){
  ....
  }
  ...
  }

  不经大量应用别的业务用例界面,这种编译依赖性真不是什么好事,更何况用了大量的低效的instanceof判断和转型操作.

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

  在这个类中,必须有一个变量来保存某一个界面跳转的路径,如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

  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);
  }

  完成这样一个类的代码量并不多,一百多行,但是却使得用户完全脱离了处

[1] [2]  下一页

[] [返回上一页] [打 印]
  • 上一篇文章:基于Java的解释器设计模式
  • 下一篇文章:开发线程安全的Spring Web应用

  • 相关文章:
  • Java Servlet开发三层数据库程序
  • [图文]Java编程中查询结果表格式输出
  • 安装JDK 就可同时运行PHP和Java?
  • PHP:编程界巨无霸 目标直指Java
  • [组图][JAVA]十四种Java开发工具点评
  • [组图]初学java常用开发工具介绍
  • 用Java实现HTTP文件队列下载
  • Java编程中更新XML文档的常用方法
  • Java学习从入门到精通 4方法篇
  • Singleton在Java中的应用
  • Java学习从入门到精通 3过程篇
  • Java学习从入门到精通 2书籍篇
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 源码发布
Copyright © 2003-2009 Ymyasp.Com. All Rights Reserved .
备案序号:粤ICP备07029071号