动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息



本月文章推荐
.面向服务架构(SOA)的原则.
.Java开发图文混排的编辑器.
.Think in java 3rd 中文版11.
.@set 语句.
.String和StringBuffer之概览.
.J2EE综合-浅析Java程序员的存储过.
.对比两个不同版本的assertEquals.
.用 Java 保存位图文件(转).
.定时执行任务的三种方法.
.java Excel API简介(翻译).
.对 JDO 的架构作一个简单的介绍.
.如何使用Java编写多线程程序(1).
.获取滚动文本框TextArea焦点位置.
.RootFolder 属性.
.产生随机数方法不能乱用.
.java 参数是如何传递的.
.applet调用javacomm20-win32API注.
.Servle和applet通信.
.java指南之使用图形:自定义绘图.
.Spring Framework中的AOP编程之入.

在Java中轻松实现界面跳转

发表日期:2008-1-5 |


假设这样一种情况,我们的系统的界面使用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<pnlPath.length;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,我们知道作为辅助的类最好是不要有实例,非凡是象这样的起接口作用的类,只提供静态方法.它的框架象这样:



上一篇:JBoss中文乱码问题解决方案 人气:627
下一篇:EJB技术之旅(一) 人气:271
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-9 顶级域名交易系统 v3.0 完整版
2008-7-9 ACTCMS网站管理系统 v2.0 Build
2008-7-9 Roclog v3.1.4 build 20080706
2008-7-9 乐彼网上开店系统(56770 Eshop)
2008-7-9 深度学习alexa排名提升专家 v1.0
2008-7-9 BBSXP 2008 Build 8.0.5 正式版
2008-7-9 一句话快速信息发布系统 修正完美
2008-7-9 ACTCMS网站管理系统 v2.0 Build
2008-7-9 乐涛涛留言本 08版
2008-7-5 AgileMessenger即时通讯工具 v1.
2008-7-5 GoodCalculator2.0版固件计算器
2008-7-5 RepoName源地址搜索工具 v1.21b
2008-7-5 AgileMessenger即时通讯工具 v1.
2008-7-5 TouchCopy多媒体管理软件 v3.13完
2008-7-5 VideosTone视频铃声 v1.1汉化破解
2008-7-5 TouchPad触摸板 v4.44破解版
2008-7-5 VideosTone破解补丁 v1.0
2008-7-5 Feeds GoogleReader客户端 v0.4.3


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報