找个借口,也许是最近太忙,已经很久没有编写 grape 了。如果不是职业程序员就好了,如果能有更高点的薪水,更充足的业余时间就好了。
终于十一了,终于有自己的时间了,终于可以把 grape 的进度往前赶赶了,终于不再找借口了。
今天把 grape 的 class.xml 配置进行了一个小修改。对 local 标签新增了 method 属性,用来指定方法调用。为什么要加这个属性?先来看看默认的配置。
- <view id="fileMenu" class="mxjava.com.grape.ui.widget.menu.FileMenu">
- <local id="menuNewDB"/>
- </view>
- <view id="menuNewDB" class="mxjava.com.grape.ui.widget.menu.MenuNewDB">
- <action id="action" class="mxjava.com.grape.ui.widget.menu.action.NewDBAction"/>
- </view>
以这种方法进行配置,grape 默认以 id 名为注射的方法名。在上例中标签 local 的 id 属性为 menuNewDB ,grape 会本地配置中寻找 id 为 menuNewDB 的配置项,在生成对象后,会默认调用 setMenuNewDB 方法将生成的 menuNewDB 对象注入 fileMenu 对象中。
大多数情况下,以上配置方法就够用了。可是恰恰是 Menu 的例子不适用。因为为 Swing 中的 Menu 对象追加 MenuItem ,是使用 Add 方法的。它像 List 一样可以追加不同的 MenuItem 。用以上方法调用时,我们必须在程序中暴露对应的 setter 方法,用以注入对应的对象。如果这时我们想扩展 Menu ,新追加一个 menuCloseDB 的 MenuItem 的话怎么办?我们只能修改 FileMenu.java 代码,新追加一个 MenuCloseDB 的属性,并暴露 setMenuCloseDB 方法,然后在 class.xml 中追加配置。这并不是个好方法,如果每次对程序进行扩展都要修改现有程序的话,将会是无尽的痛苦。所以对 grape 内核做了修改,新追加了 method 属性,用来指定方法调用。
- <view id="fileMenu" class="mxjava.com.grape.ui.widget.menu.FileMenu">
- <local id="menuNewDB" method="addItem"/>
- </view>
grape 加载 menuNewDB 时,首先检查 method 是否存在,如果存在,则调用 method 指定的方法,如果不存在则以默认的方式调用 setMenuNewDB 方法,如此很好地改善了程序的扩展性。如果你想新增 menuCloseDB 和 menuExit 两个(或更多) MenuItem ,只要:
- <view id="fileMenu" class="mxjava.com.grape.ui.widget.menu.FileMenu">
- <local id="menuNewDB" method="addItem"/>
- <local id="menuCloseDB" method="addItem"/>
- <local id="menuExit" method="addItem"/>
- </view>
| 五冠 Nokia/诺基亚 5230 5230XM 送证书V20版 内有港行 销数千台 | ||
| 1000.0元 | ||
| 批发 雷朋3025镜面反光太阳镜 太阳眼镜 19.9/副 顶级质量 | ||
| 19.9元 | ||
| 促销笔记本电脑 13.3英寸超薄N450无线网卡视频 | ||
| 1999.0元 | ![]() | |





