网站:
JavaEye
作者:
iwinyeah
链接:
http://iwinyeah.javaeye.com/blog/172974
发表时间: 2008年03月17日
声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!
Action: 规定了与用户交互的View可以触发的动作,在某个View新建之后显示之前,应先为其指定具体的Action,当用户按下了相应的Command按钮之后,View将该Command对应的Action发送到该View的Controller进行处理。
//
public class Action{
String name; // 名称
Command command; // 命令
int code; // 代码 (将由该View的传递到其Controller使用)
Item item; // 数据项
boolean defaultAction; // 是否是默认的Action
//...省略
}
请看View的基类的代码节选
public abstract class AbstractView{
//...省略
// 为该View增加Action
public void addAction( final Action action, final boolean active )
{
if( !actions.containsKey( action.getName() ) )
{
// 将Action存入Actions表中
actions.put( action.getName(), action );
if( active )
{
activateAction( action );
}
}
}
// 使Action生效可用
private void activateAction( final Action action )
{
final Command command = action.getCommand();
activeActions.put( command, action );
final Item item = action.getItem();
if( item == null )
{
addCommand( command ); // 该Action是屏幕相关的命令
}
else
{
item.addCommand( command ); // 该Action是数据项相关的命令
if( action.isDefaultAction() )
{
item.setDefaultCommand( command );
}
}
}
//...省略
// 用户按下相应的命令键后,触发执行与其关联的Action
public void commandAction(
final Command command,
final Displayable displayable
)
{
if( !handleAction( command ) )
{
if( displayable instanceof Choice )
{
AbstractController.commandAction(
this,
command,
(Choice) displayable
);
}
else
{
AbstractController.commandAction( this, command );
}
}
}
// 用户在某个指定了命令的Item按下了命令按钮时触发执行与其关联的Action
public void commandAction( final Command command, final Item item )
{
if( !handleAction( command ) )
{
AbstractController.commandAction( this, command );
}
}
// 根据所触发的命令查找关联的Action,并新它发送到Controller进行处理
public boolean handleAction( final Command command )
{
if( activeActions.containsKey( command ) )
{
final Action action = (Action) activeActions.get( command );
// 以Action代码为参数生成ControllerEvent并传递到controller处理
final ControllerEvent event = new ControllerEvent(
action.getCode(),
this
);
controller.handle( event );
return true;
}
else
{
return false;
}
}
//...省略
}
本文的讨论也很精彩,浏览讨论>>
JavaEye推荐
文章来源:
http://iwinyeah.javaeye.com/blog/172974
View <--> Controller"
trackback:ping="http://www.blogjava.net/iwinyeah/services/trackbacks/187974.aspx" />
-->