在Java中轻松实现界面跳转

假设这样一种情况,我们的系统的界面使用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){
   ....
  }
  ...
}

时间: 2024-10-27 10:18:57

在Java中轻松实现界面跳转的相关文章

在java中使用图形界面后怎么用按钮Button实现RS232串口的链接PC机上

问题描述 在java中使用图形界面后怎么用按钮Button实现RS232串口的链接PC机上 在java中使用图形界面后怎么用按钮Button实现RS232串口的链接PC机上,求大神啊 解决方案 你的按钮中就实现连接串口启动等代码 http://blog.csdn.net/kabini/article/details/1601324 解决方案二: 为button增加ActionListener,在其事件中实现你要的功能. new JButton().addActionListener(new Ac

ios-iOS有没有类似于Android中singleTask的界面跳转机制?

问题描述 iOS有没有类似于Android中singleTask的界面跳转机制? 就是从界面A跳转到B,然后返回界面A,再跳转到B,而不是重新生成一个B'.用storyboard和不用storyboard分别是怎么样的? 解决方案 http://www.zhihu.com/question/40196210

在Java中轻松打印文档

有关在Java中实现文档打印的典型说法描述了一个复杂的过程,它要求对字 体进行测定.对文本进行解析并将结果绘制到一个Graphics对象中.这个过程似 乎执行起来相当困难,并且它和用于文档视频显示的高级编程方法不一致.如果 你想要花费大量的精力来完成这个过程,那么你就不会首先想到要在Java中编程 . 你一定不想自己完成测定.解析和绘制过程,而是希望通过简单地将文档发 送到一个能为你处理所有事情的对象中来完成这个任务.本文就将介绍这样一个 对象――DocumentRenderer,它将一个文档作

界面-java中错误提示需要class、interface或enum怎么解决

问题描述 java中错误提示需要class.interface或enum怎么解决 package CarSale.CarUI; import java.awt.*; import java.awt.event.*; import java.sql.*; import javax.swing.*; class CarUI extends Frame { public static void main(String [] args) throws SQLException{ { String sql

界面-java中多个JFrame类如何使用同一个socket进行通信?

问题描述 java中多个JFrame类如何使用同一个socket进行通信? 初学java写的模拟atm机,采用tcp协议.问题主要在客户端,我写了多个JFrame类,主界面的登陆按钮触发绑定socket并验证账号功能,但后面的其他窗口如何使用已有的socket连接?下图简要表述我的思路 解决方案 Java中利用Socket进行通信Android网络编程(使用socket进行通信)java与c/c++进行socket通信 解决方案二: 写一个contatnt类 里面放一个静态变量Socket存放l

ios-iOS中实现界面跳转的方式出了push和模态,还有其他方法吗?

问题描述 iOS中实现界面跳转的方式出了push和模态,还有其他方法吗? iOS中实现界面跳转的方式出了push和模态,还有其他方法吗? 解决方案 http://www.cnblogs.com/taintain1984/archive/2013/07/28/3220730.html 解决方案二: iPad开发中还有一种特殊的popover的页面跳转方法. 解决方案三: 在界面的跳转有两种方法,一种方法是先删除原来的界面,然后在插入新的界面,使用这种方式无法实现界面跳转时的动画效果.另一种将跳转的

android-Android 如何从html5界面中的一个按钮跳转至指定的一个Activity

问题描述 Android 如何从html5界面中的一个按钮跳转至指定的一个Activity Android 如何从html5界面中的一个按钮跳转至指定的一个Activity呢 解决方案 webview注入js监听点击事件,然后跳转 参考http://blog.csdn.net/zzf112/article/details/19618101/ 解决方案二: 这个确实没用过,回头我看看,涉及到html与activity交互 解决方案三: 定义本地跳转方法,添加暴露接口道WebView,在js中调用即

急急急...在线等待。java开发的WEB界面中的某个按钮失效

问题描述 用java开发的WEB界面中的某个按钮(button按钮再用css再按钮上面加一个图片),在一个界面中点击按钮失效了,但是在别的机子上可以正常使用,用的IE8,在线等待. 解决方案 解决方案二:IE8有自带的developtools,可以调试页面的,你可以试下.另外不知道你说的失效时什么情况.解决方案三:就是点击以后,没有反应了解决方案四:没看明白~~解决方案五:比如说,你在一个修改用户信息的界面中有一个"取消按钮"和一个"确认按钮",其中一个按钮,点击后

教你轻松读懂Java中的Socket编程

餐前甜点 Unix的输入输出(IO)系统遵循Open-Read-Write-Close这样的操作范本.当一个用户进程进行IO操作之前,它需要调用Open来指定并获取待操作文件或设备读取或写入的权限.一旦IO操作对象被打开,那么这个用户进程可以对这个对象进行一次或多次的读取或写入操作.Read操作用来从IO操作对象读取数据,并将数据传递给用户进程.Write操作用来将用户进程中的数据传递(写入)到IO操作对象. 当所有的Read和Write操作结束之后,用户进程需要调用Close来通知系统其完成对