在Java中轻松实现界面跳转
假设这样一种情况,我们系统的界面是用Javax搭建的。Swing包,界面基于BaseView,这是一个容器。当然要提供获取控件元素的功能,比如按钮、下拉框、表格等。,但它只是一个容器,我们界面的所有元素都部署在JPanel上。
描述为:
一个接口就是一个BaseView,里面只包含一个JPanel,而这个JPanel包含了我们所有的Swing控件,比如JButton,JLable等等。
有一个问题:我们通常因为业务需要,在完成一个界面的操作后,要自动跳转到下一个界面。(题外话:因为我们的操作是基于GUI的,所以经常可以保存会话信息,而Web不能。)这往往成为系统实施过程中效率低下的因素。我看到我现在的系统里有人用600行代码来判断上一个应该跳转到哪个界面。)
当然,一种方法是在下一个接口类中包含指向上一个接口的变量。我们说这样不方便,增加了依赖性,对软件不好。
接下来我给出我的解决方案,希望对采用这种接口结构的朋友有所帮助。
(以下都是用简化模型描述的。)
1.简单来说,我们假设BaseView继承了JWindow,当然也可以是另一个容器(根据你的实现),大概是这样的:
公共抽象基类视图扩展j window {
...
(实现一些方法来获取接口控件和接口信息)。
}
2。每个接口类的定义如下:
公共类MyView扩展base view {
JPanel my panel;
public void playoutPanel(){
JButton my button = new JButton(" OK ");
my panel . add(my button);
......
(将您需要的控件和布局添加到我的面板)
}
}
3.假设还有其他界面OneView,Two View,Three View,这些界面在处理操作后都需要跳转到myView,并且在myView中按下ok按钮后需要返回原界面。
原来臃肿的代码需要在myView中增加一个变量BaseView anyView用于存储被转移的接口anyView,赋值是通过引用三者的跳转代码中的myView来设置的。跳转代码是这样的:
public void jump(){
my view my view = new my view();
my view . any view = this;
this . remove(this . xxpanel);
this . add(my view . get panel());
this . repaint();
}
看起来不错。虽然需要引用MyView类,调用它的变量和方法,但是跳回来就没那么容易了。不然怎么会用600线!
大概是这样的:(这个被我简化了)
public void go back(){
if(OneView的any view instance){
any view . remove(this . my view);
OneView ov =(OneView)any view;
any view . add(ov . get panel());
any view . repaint();
}
if(any view instance of two view){
....
}
...
}
在没有大量其他业务用例接口的情况下,这种编译依赖真的不是一件好事,更不用说大量低效的判断和转换操作实例了。
0条评论