一篇经典的 介绍netbeans中swing 应用程序框架的文章(4)
时间:2014-04-20 00:44 来源:www.ymxhw.com 作者:幽默笑话网 点击:次
自此环境相关的按钮就做完了,我们可以运行代码试试。 从上面的例子中我们看到,做这个例子真正只写了一行代码: setHasSelect( ((JCheckBox)evt.getSource()).isSelected());
其它都是通过IDE生成的,多亏IDE和SAF的Action我们才能如此高效的制作程序。 l 菜单和按钮关联 菜单和按钮经常表现为同一个行为,我们当然可以各自实现它,但是这样就产生了冗余 编写程序最总要的一点就是不要重复代码。在Design模式下右键单击相应的菜单,在Set Action…操作里面选择相应Action 这样菜单和按钮就关联起来了,该菜单和按钮行为相同,SAF如此简单的为我们完成了任务。 这又是Action解决了一大问题 l Background Task 刚才在制作环境相关的按钮时,我们忽略一个选项
现在我们来介绍这个非常重要的特性 以前人们不断抱怨Swing是如何慢,其实JRE1.5后,特别是1.6后Swing性能已经完全不是问题,问题是开发Swing的程序员没有处理好Swing的线程问题,比如本该在后台运行的任务却直接写在Swing中,造成Swing程序相应缓慢。 在以前你要非常熟练Swing和小心才能写出高质量的Swing程序来,但是现在你利用SAF提供的框架支持,处理后台任务变得非常容易。 我们 Set Action 的时候把Background Task选项选中,最后看一下IDE给我们生成了什么代码: 原来的代码:
Background Task选项选中后为如下代码:
} 可以看到,actionMethodName()方法里运行的代码将在一个新线程中运行 如果你要彻底明白上面的代码和EDT是什么概念,请浏览下面的博客地址 中有关Swing部分。 如果您懒得浏览,那么请遵循下面的建议 1、在ActionMethodNameTask构造器中 代码运行在EDT(事件分派进程)中,在这里复制doInBackground() 方法中所需要的GUI 的状态或参数到ActionMethodNameTask的成员变量中。 2、doInBackground()方法中,不要存放处理GUI界面的代码,该方法返回的值将自动传到后面succeeded(Object Result)中 3、succeeded()运行在EDT中,任务成功的执行后才执行该方法,该方法主要收集doInBackground()方法运行后的结果以用来更新GUI程序。 我们做一下试验,为ActionMethodNameTask增加一些代码:
} 运行程序后点击按钮 任务开始: 任务结束:
注意提示信息只显示一定时间,这个时间可以自己设定,一定时间后信息自动消失。 l 制作阻塞按钮
我经常要做具有阻塞功能的按钮,比如我们按一下按钮,就跳出如上对话框,程序在后台运行任务,但是我们不能进行其它操作,除非我们点击取消按钮。 制作这样的按钮,其实非常简单: 在Set Action...进行如下设置就可以了
Blocking Type 可以选择NONE,ACTION,COMPONENT,WINDOW,APPLICATION指定阻塞的范围空间,你可以自己尝试一下,效果是怎样的。 从上面几个小例子可以看到引入@Action巨大好处了吧。 国际化支持 正如开始所说的,SAF本身就很好的支持了国际化,再加上NetBeans辅助,国际化简直易如反掌。 我们知道一些企业框架比如Structs、JSF是通过后缀名为properties的文件保存相关资源的。 SAF也是,我们看看IDE为我们生成的properties文件
从上图可以看出, FooApp.java
这三个类在foo.resources包分别对应有后缀名为properties的文件 FooApp. properties
也就是说,类里面用到文字资源,图像资源集中放到了一起。这样国际化就相当简单了 这时也许你会说,一开始就写properties的文件,岂不是很麻烦? 别忘了,我们NetBeans的支持,做这个工作几乎不费你任何力气 (责任编辑:幽默笑话网) |