`
hereson
  • 浏览: 1454487 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

AsWing 和 MVC

阅读更多



我们用AsWing 开发应用程序的时候,可以考虑用 MVC,下面我来帖一个我自己平时用的 MVC 的写法。
如果还一直对 “逻辑代码与界面代码混淆” 感到困扰的话,可以参考一下这样的写法。
大概是这样的。
有一个 View 类,这个类负责建立界面,然后界面上需要活动的组件通过 getXXX 方式向外部提供。
View 当中没有逻辑代码,对外公开的只有对需要活动的组件的访问,至于这些组件是被放置在什么位置,多大等等界面细节外部是看不到的。另一方面,界面的布局发生变化不会影响到 View 以外的类。
有一个 Model 类,这个类就是数据,同时也是一个 EventDispatcher, 当数据发生变化的时候会对外发布事件。

有一个 Controller 类,这个类有两个通道,一个通道监听界面的事件,并且把相应的数据写入 Model。另一个通道负责监听Model 的事件,把更新显示到 View 上面。

主程序是这样的:
var view:View = new View(this);
var model:Model = new Model();
var controller:Controller = new Controller();
controller.setModel(model);
controller.setView(view);
controller.start();
View 类的代码是这样的:
package example {
import org.aswing.JLabel;
import org.aswing.JButton;
import org.aswing.JTextField;
import org.aswing.JFrame;
import flash.display.DisplayObjectContainer;
import org.aswing.SoftBoxLayout;
import org.aswing.JPanel;
import org.aswing.GridLayout;
import org.aswing.border.LineBorder;
import org.aswing.Container;
import org.aswing.ASColor;
import org.aswing.border.TitledBorder;
import org.aswing.BorderLayout;
import org.aswing.FlowLayout;
public class View {
private var label:JLabel;
private var textField:JTextField;
private var btn:JButton;
public function View(owner:DisplayObjectContainer) {
this.build(owner);
}
protected function build(owner:DisplayObjectContainer) :void {
this.label = new JLabel(”No Data”);
this.textField = new JTextField();
this.btn = new JButton(”向 Model 提交”);
var frame:JFrame = new JFrame(owner, “显示界面”, true);
frame.setSizeWH(300, 200);
frame.setLocationXY(18, 18);
frame.setBackground(ASColor.WHITE);
frame.setVisible(true);
var c:Container = frame.getContentPane();
c.setLayout(new SoftBoxLayout(SoftBoxLayout.Y_AXIS, 15, SoftBoxLayout.CENTER));
var panel0:JPanel = new JPanel(new BorderLayout());
panel0.setBorder(new TitledBorder(null, “这里显示从 Model 获取的内容”, 1.0, 0.0, 0.0, 3.0));
panel0.append(this.label);
c.append(panel0);
var panel1:JPanel = new JPanel(new BorderLayout());
panel1.setBorder(new TitledBorder(null, “输入您要提交给 Model 的内容”, 1.0, 0.0, 0.0, 3.0));
panel1.append(this.textField);
c.append(panel1);
var panel2:JPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
panel2.append(this.btn);
c.append(panel2);
}
public function getLabel() :JLabel {
return this.label;
}
public function getTextField() :JTextField {
return this.textField;
}
public function getButton() :JButton {
return this.btn;
}
}
}
Model 类的代码是这样的:
package example {
import flash.events.EventDispatcher;
import flash.events.Event;
public class Model extends EventDispatcher {
private var data:String;
public function setData(src:String) :void {
if (src != data) {
this.data = src;
var event:Event = new Event(Event.CHANGE);
this.dispatchEvent(event);
} else {
//pass
}
}
public function getData() :String {
return this.data;
}
}
}
Controller 类的代码是这样的:
package example {
import flash.events.Event;
import flash.events.MouseEvent;
import org.aswing.event.AWEvent;
public class Controller {
private var model:Model;
private var view:View;
public function Controller(model:Model=null, view:View=null) {
this.setModel(model);
this.setView(view);
}
public function setModel(model:Model) :void {
this.model = model;
}
public function setView(view:View) :void {
this.view = view;
}
//start controling
public function start() :void {
var inController:InputController = new InputController(this.view, this.model);
var outControler:OutputController = new OutputController(this.view, this.model);
}
}
}
import flash.events.Event;
import example.View;
import example.Model;
import org.aswing.JLabel;
class InputController {
private var view:View;
private var model:Model;
public function InputController(view:View, model:Model) {
this.view = view;
this.model = model;
this.view.getButton().addActionListener(this.actionPerformed);
}
public function actionPerformed(e:Event) :void {
var src:String = this.view.getTextField().getText();
this.model.setData(src);
}
}
class OutputController {
private var view:View;
private var model:Model;
public function OutputController(view:View, model:Model) {
this.view = view;
this.model = model;
this.model.addEventListener(Event.CHANGE, this.actionPerformed);
}
public function actionPerformed(e:Event) :void {
var data:String = this.model.getData();
this.view.getLabel().setText(data);
}
}

分享到:
评论

相关推荐

    Flash之pureMVC,aswing框架Libs文件

    标题中的“Flash之pureMVC,aswing框架Libs文件”指的是两个主要的ActionScript库:PureMVC和AsWing。这两个库都是为在Adobe Flash环境中开发富互联网应用程序(RIA)而设计的,尤其在Flex框架下使用广泛。下面将详细...

    AsWing AEON 皮肤实例

    AsWing AEON皮肤实例是针对AsWing框架的一个特定主题,主要涉及用户界面的定制化和美化。AsWing是一款流行的Java Swing开发库,它提供了丰富的组件和强大的功能,帮助开发者构建美观、高效的桌面应用程序。Aeon皮肤...

    ASWING教程

    - **开源UI库的兴起**:随着需求的增长,Flash开源社区出现了一批高质量的UI组件库,如AsWing、EnFlash和ActionStep等,这些库以其优秀的架构设计和易于使用的API迅速受到开发者的青睐。 - **ActionScript 3时代的...

    AsWing 教程中文版

    这个教程的中文版旨在帮助初学者快速入门AsWing,通过一个实际的日程管理程序的开发来讲解其核心概念和组件的使用。 在教程的第一部分,"小试身手,hello 日程",作者选择了日程管理程序作为示例,因为它的界面构建...

    aswing2.0 src

    ASwing2.0 SRC是一个针对ASwing库的源码版本,它为开发者提供了一种深入理解和定制ASwing的可能性。ASwing本身是一个ActionScript框架,它模仿了Java Swing的设计,为Flash和Flex应用提供了丰富的组件库,使得在这些...

    AsWing UI源码

    【AsWing UI源码】是一个面向AS3(ActionScript 3)开发者的UI库,提供了丰富的用户界面组件和工具,旨在简化AS3中的图形用户界面(GUI)开发。这个库不仅包含了完整的源代码,还附带了GUI编辑器,方便开发者设计和...

    Aswing皮肤制作

    Aswing皮肤制作是一个让初学者了解和掌握如何定制个性化用户界面的过程。Aswing是一个轻量级的图形用户界面(GUI)库,它为Java开发者提供了一种创建美观、交互式的应用界面的方式。在这个教程中,我们将深入探讨...

    aswing组件知识点

    ### aswing组件知识点详解 ...AsWing提供了一系列强大的工具和组件,帮助开发者构建功能丰富、用户友好的应用程序。通过灵活运用这些组件,可以大大简化GUI应用程序的开发过程,并提高最终产品的质量。

    aswing API

    aswing API,与AsWing Book.pdf一起使用

    Flex游戏开发框架--GameFramework_MVC

    在实际开发过程中,开发者首先需要集成AsWing和PureMVC的库文件,然后按照框架的约定创建游戏的各个组件和模块。通过PureMVC的命令和观察者模式,可以轻松实现游戏状态的改变和事件的响应。同时,利用AsWing提供的UI...

    aswing flash ui编程的利器

    5. **MVC模式**:ASwing鼓励采用Model-View-Controller(MVC)设计模式,将业务逻辑、视图展示和用户交互解耦,提高代码的可重用性和可维护性。 6. **国际化支持**:ASwing支持多语言环境,开发者可以轻松地为应用...

    Flash9下as3.0编程的aswing包

    ASwing包是专门为在Flash9环境下使用ActionScript 3.0(AS3.0)进行编程设计的一个辅助工具集。这个工具集旨在提供一个类似Java...通过深入研究和使用ASwing,不仅可以提升开发效率,还能增强对AS3.0特性的理解和掌握。

    aswing_a3_1.3.2_allinone

    ASwing可能是一个基于Java Swing的开源图形用户界面(GUI)框架,A3可能是该框架的一个子项目或组件,而1.3.2则是这个版本的编号,通常表示这是一个更新和改进的版本,相比于之前的版本可能修复了某些问题,增加了新...

    ASWing实现中拖放

    ASWing基于Java Swing,因此它遵循MVC(模型-视图-控制器)架构,提供了一套丰富的组件库,可以创建复杂的桌面应用程序。在ASWing中实现拖放,你需要理解组件、事件监听器和拖放相关的API。 1. **拖放API**:在...

    AsWing Book.pdf

    AsWing Book.pdfAsWing Book.pdfAsWing Book.pdfAsWing Book.pdf

    asWing知识点

    根据提供的信息,我们可以总结出以下关于asWing的知识点: ### 1. JPanel与AsWing容器 ...这些知识点涵盖了从基础组件到高级功能的各个方面,对于理解和应用asWing进行图形用户界面开发非常有帮助。

    aswing类库

    aswing类库的下载,可以让大家使用现成的布局来显示对象很简单很方便

    aswing 帮助文档

    AS3的aswing帮助文档! AS3的程序员必备物品。。详细的介绍哦

    AsWing 实例(登陆和注册界面)

    AsWing是一款基于ActionScript 3 (AS3)的轻量级UI框架,它为开发者提供了构建富媒体应用和游戏的界面工具。本实例聚焦于使用AsWing创建登录和注册界面,这是一个常见的应用场景,特别是在Web和桌面应用程序中。下面...

    AsWing 组件框架

    AsWing框架的设计主要基于MVC(模型-视图-控制器)模式,这种模式在软件工程中被广泛用于分离业务逻辑和用户界面。在AsWing中,模型负责处理数据,视图负责显示数据,而控制器则负责处理用户交互事件,实现三者之间...

Global site tag (gtag.js) - Google Analytics