Java中轻松实现界面跳转Java认证考试
文章作者 100test 发表时间 2010:03:26 18:32:19
来源 100Test.Com百考试题网
假设这样一种情况,我们的系统的界面使用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-