公司最近在开发一个JAVA Swing的c/s系统,用JAVA做c/s系统的比较少,在此记录我的点滴收获。
(现在只是完成了UI的大体设计。事件没写,数据库也没有连。)
一.Introducing netbeans 5.0 beta
采用的IDE是SUN的Netbeans 5.0 beta。完全免费:)
-matisse
我想最重要的一个新特征应该是新加入的free design,这是一个完全可以自定义的layout,使用起来非常方便。但是,这个Layout也非常不稳定,经常会出错,这点在下面会详细说明。
-Internationalization
这个在以前的版本里也有,我认为这是一个非常方便的I18N工具。后面也会详细说明。
更多的特征可以查看netbeans的网站上关于
5.0新特征的说明。
二.Compare to the Eclipse platform, i think netbeans is easier for u to create a UI program
跟Eclipse相比,我认为Netbeans更易于编写UI程序,他的UI设计更方便。(不过我不喜欢Netbeans的界面,还是觉得Eclipse更清新)
当然,在Eclipse里也有很多插件可以设计UI,但是很多好的插件是要钱的,公司可不能用:),比如我觉得
Jigloo就不错。
三.步步精简
首先,在开发的最开始我们狂用Free Design,当时觉得真是方便阿,跟以前用4.1的时候用GridBagLayout慢慢调不可同日而语,开发速度大大提升。
接
下来发现问题了,用Free
Design生成的代码非常多,而且很乱,更要命的是有的时候在编辑UI的时候,拖拽控件会发生错误,很是烦人。(其实我觉得有的时候虽然会发生错误,但
是只要耐心的多调整一下,也是可以实现的)。另外一个问题是,是用Free
Design需要单独另外引入一个jar包,没有包含在jdk5.0里。于是领导同志发话了,为了避免各方面麻烦,我们不用Free
Design了,还是改成用GridBagLayout。(我想sun在以后的版本里可得好好调整一下这个Free
Desing了,这可是一个非常方便的layout阿,以后如果能做到象vb一样那么方便,那可是有革命性滴,hehe)
我其实特别没耐心,非常
不愿意用GridBagLayout,但是没办法阿,于是乖乖地用了。不过慢慢的发现GridBagLayout也非常方便,而且
当你运行后,拖拽窗口不会影响里面控件的位置。另外生成的代码很整齐,也精简了不少。不错!(他的缺点就是可设置的参数太多了,如果不用IDE要一次次的
自己运行程序来看效果慢慢调)
接下来问题又来了,我们程序的主窗口左边是一个Jtree,通过点击右边显示相应的内容。所以我们要将做好的
Dialog放到一个主窗口的右
边的Panel里,而且里面的控件(比如说表格)要随着主窗口的拖放变化大小,可是在gridbaglayout里我们都把大小钉死了。领导同志又想出好
主意了:简化layout,尽量用简单的layout,比如borderlayout,
flowlayout等,然后将一个Panel分为好几个Panel,将主panel设为borderlayout或者其他,依情况而定。这些
layout虽然可调控性不强,但是代码很简单;另外便于以后调整。例如我们的一堆button本来是在页面下方的,想要调整到上方去,那么如果是以前的
gridbaglayout,那么要调好久。现在,只用简单的设置borderlayout就可以了,可以将下方的panel位置设为north,然后把
上方的panel设为south就可以了,这样其实根本不用IDE,直接改代码就可以。
进行这次调整后,当托放主窗口时,表格的大小也随之改变了。就我看来,borderlayout好像只有中间位置,即center位置的panel才能随 着窗口拖放变化,所以我们把表格都是放在center位置的Panel里的,不知道是不是这样设计的。
从开发过程的三次调整中,我发现,其实用Java Swing编程,真正牛的还是直接用代码来编!精简的才是最好滴。
四. Problems we met and our solution:
1.我们要做中文和英文两个版本,how?
这
里我们就用到了前面提到的internationalization,首先在某个package里新建一个properties文件(在others那
个里面)。在这个properties文件里可以添加各种locale,我们在这里只添加zh_CN,另外的一个自动建立的
default.language。建立完成后,先在某个Dialog的编辑状态下,点击上面的tools->
internationalization->internationalize,在弹出的对话框里选择刚才建立的properties文件,系统
会自动搜索你的文本区域,并且命名好这个key,你在下面填入key值就可以了。这是填入的key值是default
language的,接下来可以右键点击建立好的properties文件,选择open,这时可以看到你所建立的几种locale都列出来了,直接在这
里翻译吧,系统会自动将中文转成UTF-8码。这样做完后,启动程序时会根据不同的locale显示不同的文字,哈哈:)爽~
几点补充说明:
1)
选择tools->internationalization->internationalize自动搜索文本区域时,会经常找不到所
有的文本区域,可以关掉重新再找。往往这样还是不行,这时候就要手动改了,自己去看看生成的代码吧。还可以直接选择properties栏里text后面
的按钮,在下拉框选择resourcebundle,然后也可以填写。选择还是很多滴。
2)例如JTable里的文字,你可以选择
properties里的model后面的按钮,选择From Connection,选择user
code自己写代码。“java.util.ResourceBundle.getBundle("YourPropertiesFileName").
getString("KeyNameInPropertiesFile"))”
2.日期选择
某些Dialog里面要选择日期,所以需要做一个日期选择框dateSelector。开源的好处体现出来了,从sourceforge上面找了一个叫
JCalendar的项目,直接用上,呵呵。(不过要注意说明copyright哦!)
3.Jtable的Title双行显示(不是用html实现)
Jtable
的确不太好调整,自己写代码编仿彿又很麻烦。比如我就碰到了表格内容很多,这个时候就需要将有些Title双行显示,才能显得美观。虽然
jdk5.0支持html,但是领导建议不要用,那就不用把,在Java
CodeGuru上找到了个类MultiLineHeaderRenderer,放在工具包里,直接调用就可以了,呵呵(同样注意标明出处)。另外,在
JavaGuru上还有跨行Title的类,不过我们没有用。(http:
//www.codeguru.com/java/articles/126.shtml,另外还有RowHeader的类http:
//www.codeguru.com/java/articles/127.shtml)
其实还有很多碰到的难点,通过上网查资料和自己摸索,都解决了,有问题就google吧:)
五.Some skills of netbeans
netbeans的技巧有很多,我就不在这多说了,说几个我觉得比较有用的:
Ctrl+Shift+F 自动引入需要的包
Ctrl+Space or Ctrl+\ 出提示输入
Ctrl+Shift+Space show javadoc dialog
进行重命名时,用Refector, 会自动修改所有相关的地方
六. Concluding
算起来从接触netbeans到现在UI的设计基本完成,还不到一个月的时间,还有很多不足之处,大家多多指教。