**如何分离Java的界面代码与业务代码**

Jiazi840207 2005-03-25 10:50:04
一般来说,在用Swing写程序时,动作响应的实现一般是用匿名的内部类:

itemNew.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//....
}
});

但如果界面比较复杂时, 都这样写的话会造成界面的类很大,维护起来写不方便.怎么才可以很好地分离界面与业务代码,而又不破坏封装呢?有没有什么例子...
...全文
375 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jiazi840207 2005-03-29
  • 打赏
  • 举报
回复
再顶一下...
Jiazi840207 2005-03-28
  • 打赏
  • 举报
回复
TO superman421(38度的雪) :
还有一点不明白,就是在上例的Mediator类中,如何才能改变界面呢?(如界面中按钮以及TextField的状态等...)...是不是还要在Mediator的构造器中传入Test的引用呢?
fdabobi 2005-03-26
  • 打赏
  • 举报
回复
有几种方法
1.创建扩展监听器接口的一个自定义类,在你的界面代码内使用
MyListener a = new MyListener();
itemNew.addActionListener(a);
这样就分成2个文件了,你可能看上去舒服点,维护也可能容易一些
因为可以拥有自己的构造函数与各种属性,这样的监听器能够处理更复杂的事务
比较适合复杂的事件处理,或者同时为多个组件提供服务的监听器

2.还是一个文件,监听器作为内部类被声明
但是在事件触发时,执行在外部类中定义个一个方法,
因为匿名类是可以调用外部类属性和方法的,如:
public void doAction(){
....处理工作
}
itemNew.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
...若干操作
doAction();
...若干操作
}
});
这样,你只需要注意维护那个doAction就行了
而且你能把多个内部监听类共有的代码分离出来作为一个方法来维护
这样比较适合较小并且事件处理不复杂的程序
apollo333 2005-03-26
  • 打赏
  • 举报
回复
按 fdabobi(小爪尖尖) 的第一种方法就可以


MyListener a = new MyListener();
itemNew.addActionListener(a);

其中
public class MyListener implements ActionListener,MouseListener{

public void mousePressed(MouseEvent e) {
//do something
}

public void actionPerformed(ActionEvent e){
//do something
}

//other methods.......


}


superman421 2005-03-26
  • 打赏
  • 举报
回复
不用那么悬浮的 MVC struts之类的。
问的是图形界面的问题。
用点设计模式就可以了! 看看这个 mediator

public class Mediator implements ActionListener{
protected JFrame gui;

public void actionPerformed(ActionEvent e)
{
...
}

public addToMediator(JFramegui)
{
this.gui = gui;
}
}

/////////////////////////
public class Test extends JFrame
{
Mediator mediator;
JButton button;

public void Test(){
button = new JButton("...");
button.addActionListener(mediator);
}

public static void main(){
...
}
}

给你一个简单的例子。自己动动脑筋改改,同一个界面就可以做不同的事了,只要换一个mediator.
至少这个样子可以让你把界面和功能分开。
leekooqi 2005-03-26
  • 打赏
  • 举报
回复
建议先学习JavaBean,再深入点到EJB,到时候,你就自然知道了!
飞行的兔子 2005-03-26
  • 打赏
  • 举报
回复
struts很简单的,好好看看几天就能理解的很好了!
Jiazi840207 2005-03-26
  • 打赏
  • 举报
回复
可是对STRUCTS了解不多,也没有时间看了...这个复杂吗?
java_jing 2005-03-26
  • 打赏
  • 举报
回复
mvc.struts不错
wandou999 2005-03-26
  • 打赏
  • 举报
回复
如果你试着去用STRUTS,一切问题都解决了
Jiazi840207 2005-03-26
  • 打赏
  • 举报
回复
按apollo333()所说的方法有一个问题,如果要改访问界面代码中的其它元素(如要改变界面中其它组件的状态),就不能声明为private的,是不是破坏了封装了呢?
平淡面对 2005-03-26
  • 打赏
  • 举报
回复
Adapter 模式就很适合。你可以继承相应的Adapter, 写你需要的部分。
飞行的兔子 2005-03-25
  • 打赏
  • 举报
回复
你将这个业务类单独写成一个类,在内部引用就是了,难道一定要写在内部?
Hodex 2005-03-25
  • 打赏
  • 举报
回复
可参考MVC模式或看看ejb中的设计模式

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧