Topic: Java 中 GUI 设计和实现(zt)

  Print this page

1.Java 中 GUI 设计和实现(zt) Copy to clipboard
Posted by: zoff
Posted on: 2003-08-04 12:22

GUI设计和实现是Java 中Application 和Applet中的
“面子工程”。我们一直盼望这Java能够和VB一样,把一些控件
拖拉到设计面板上,就可以达到我们预先设计的模样。然而,
遗憾,Java的GUI使用复杂的Layout来做控制,如果界面复杂
而且经常变动时,实现和维护一个Application就是一场恶梦。

我们先看看通常的实现方法。也就是学习并且记住各种
Layout的属性,设置,然后手工code。不幸的我曾经被摊上这样
的事情。界面设计的一点变动,都需要手工修改代码,然后运行
看效果是否一致,再修改,再运行,永无宁日。有志于此道的同
仁可以参考:http://java.sun.com/docs/books/ 下面的两本
《Java Look and Feel Design Guidelines》以及Swing Tutorial。

万幸,第一个版本VisualCafe的出现将我从水深火热当
中解放了出来,它的同类JBuilder是我后来实现GUI主要工具。然后,
快乐是短暂的,换来的只是无穷无尽的痛苦跟长叹。使用
JBuilder来实现的GUI,看起来很不错,只要把控件拖拖拉拉就可以。
但是,首先,并不是拖拖拉拉那么简单,你要设定好Layout,要使用
诸多的Panel来届定各个控件。其次,一旦碰到你的设计需要改变时,
千万别手工修改代码,否则JBuilder可不一定认得。最后,如果你
打算用JBuilder来修改GUI的设计,那么你的工作量和重头开始区别
不大,因为你要改变Layout,增加Panel,来达到你想要的目的。所
见即所得是真的,但为了达到那个所得,我又陷入了水热火深当中。

而且,更为不幸的是,当你想重用某部分界面的时候,你会
怎么做?将这部分代码拷贝出来?违反了不重复的原则。抽取出来做
成一个Bean?对嘛,这才是好办法。可是真的是好办法吗?别忘了,
你把这部分界面抽取出来,意味着又是一次手忙脚乱的重新布局。

布局的痛苦一直缠绕着我,直到有一天天上掉下个星星砸着
我的脑袋,让我脑袋震荡了一下,想到应该有办法把GUI的布局用某种
语言记录下来,直接修改这种布局描述语言。当然了,如果有了想法
就自己实现,那我会累死的。既然有google君这样博见多闻的智者,
自然我会先向他讨教一二。结果令人满意,因为确实有很多这样的项目
存在。当然也让我很沮丧,满以为很新的想法,没想到已经有这么多先驱
了。沮丧归沮丧,然而赶紧尝试这一解决方案才是正路。于是下载了无数
的此类项目:

http://www.jeasy.de/
http://www.vienas.ch/smaker/
http://jgb.sourceforge.net/
http://www.trcinc.com/go/sl.asp?s=xmltalk
http://jxul.sourceforge.net/
......

经过尝试和淘汰,我终于解脱了。要问XML 定义GUI有什么优点,
我可以一一道来:

1. MVC。使用XML定义GUI,你根本不会妄想在XML当中就做事件的处理对不对?
2. 修改方便。不用费劲去拖动控件,只需要修改XML就好了。
3. Reuse。当你需要重用某个View的时候,只要把它include进来,就可以使用了。
还有Action也是这样。这样,这个Dialog当中的一个Panel(例如有若干个输入
框),就可以很方便的用在我这个Frame当中了,比如用在右边的那个Panel当中。
Action就更不用说了。
4. 代码移植性。先给大家介绍个好站点,http://www.creamtec.com/webcream/ 它是
干吗的?它是把Swing做成的Application给你变成jsp/servlet的。牛吧。但是,
有了XML,我们也可以做到这一点,说不定还不用它那么费劲。当然,真正这样做的
例子我还没见到。
5. 还是代码移植性。我们一直在谈Java,可是这种用XML写的View,可以理直气壮的用在
其他语言当中对不对?

缺点当然也有:
1. 非所见即所得
2. 使用的是运行时编译,而不是code generation,造成非要运行才能发现错误
3. 非标准化。不过这个我已经发现了一个事实上的标准XUL:
http://www.xulplanet.com/tutorials/xultu/
http://www.mozilla.org/xpfe/xptoolkit/xulintro.html

以上是我若干年来用Java 设计和实现GUI的一点点心得,大家尽管拍砖。

2.Re:Java 中 GUI 设计和实现(zt) [Re: zoff] Copy to clipboard
Posted by: SimonLei
Posted on: 2003-08-04 12:53

呵呵,我去年写的老帖子,没想到还有人提起来。Embaressed
最开始贴在这里:
http://sailing.zuasoft.com/post/view?bid=7&id=638&sty=3

3.Re:Java 中 GUI 设计和实现(zt) [Re: zoff] Copy to clipboard
Posted by: zoff
Posted on: 2003-08-04 16:11

是啊,就是看了觉得不错,想给没看到的同事看看,没想到作者也在这里,那你觉得以上的观点有没有变化啊?

4.Re:Java 中 GUI 设计和实现(zt) [Re: zoff] Copy to clipboard
Posted by: SimonLei
Posted on: 2003-08-04 16:12

呵呵,多谢。
我的看法基本没变,不过我现在打算放弃 Swing. Tongue

5.Re:Java 中 GUI 设计和实现(zt) [Re: SimonLei] Copy to clipboard
Posted by: mazalet
Posted on: 2003-08-04 16:53

SimonLei wrote:
呵呵,多谢。
我的看法基本没变,不过我现在打算放弃 Swing. Tongue

准备另开发一个替代它?

6.Re:Java 中 GUI 设计和实现(zt) [Re: zoff] Copy to clipboard
Posted by: ringayumi
Posted on: 2003-08-04 20:43

Would you like to use SWT instead of swing?
or give up it......
Layout can't easy use?

7.Re:Java 中 GUI 设计和实现(zt) [Re: ringayumi] Copy to clipboard
Posted by: SimonLei
Posted on: 2003-08-05 09:02

no, I am turning to B/S, so give up the Swing , AWT or SWT

8.Re:Java 中 GUI 设计和实现(zt) [Re: zoff] Copy to clipboard
Posted by: floater
Posted on: 2003-08-05 11:34

http://java.sun.com/products/jfc/tsc/articles/persistence2/

9.Re:Java 中 GUI 设计和实现(zt) [Re: zoff] Copy to clipboard
Posted by: zoff
Posted on: 2003-08-05 14:33

怎么ftp要2分了,我1分就不能下载和上传了

10.Re:Java 中 GUI 设计和实现(zt) [Re: zoff] Copy to clipboard
Posted by: RuRuKevin
Posted on: 2003-08-07 12:41

我觉得zoff说的不错,用xml实现java的GUI确实不失为一个好的方法.
但是我觉得在用xml来实现java的GUI效率会比较的低,
而且配置文件的书写也是一个很繁琐的事情.
我倒是觉得在java的GUI设计中,可以定制一些自己的控件,
比如,我们最常见的label + textField,就可以把它放在一个JPanel上,
然后以这个JPanel作为一个单元加入到布局中.
一开始写Java的GUI是用JBuilder画的,虽然直观,
但还是比较繁琐,因为有Layout的约束,现在我都是用代码生成界面了,
我觉得只要自己知道需要设计成什么样子的界面,
写代码也未必比直接图形拖拉的效果差.
最后我还想说一点,java在实现GUI的时候,
会把生成GUI的代码也放在.java文件中,我觉得这样会造成代码比较冗余,
而且维护起来不甚方便,因为我们最关心的并非是这些界面是怎么生成的,
我们关心的是这些界面中元素的使用,不禁想到VB,
VB的界面生成的代码,程序员是不可见的,
而程序员需要关心的只是那些代码元素的action,
由此联想到,我们可以把一个Java的GUI设计成这样的形式,
我们定义两个class,在这里我称他们为parentClass,childClass,
childClass继承parentClass,在parentClass中放生成GUI的代码,
并且把GUI中组件设为protected,以便在childClass中使用,
而在childClass中,就实现parentClass中组件的action.
这样我们就可以象VB那样只需维护childClass就可以了,
当然界面的改动则去修改parentClass.
以上是我的一些愚见,望各位赐教.

11.Re:Java 中 GUI 设计和实现(zt) [Re: zoff] Copy to clipboard
Posted by: sothis
Posted on: 2003-08-13 03:09

XML定义的GUI应该不光可以适应Swing,还能以同样的描述适应Web Page,Native Windows GUI等等
没有根据,随想而已

12.Re:Java 中 GUI 设计和实现(zt) [Re: zoff] Copy to clipboard
Posted by: jeez
Posted on: 2003-08-18 11:46

http://java.sun.com/products/jfc/tsc/articles/persistence2/



这里的GUI Xml,看起来就眼晕,这样写,我宁可直接写程序去了。

13.Re:Java 中 GUI 设计和实现(zt) [Re: zoff] Copy to clipboard
Posted by: sothis
Posted on: 2003-08-23 20:42

用IDE工具,WYSWYG,不就可以了。
直接写XML当然不爽。

14.Re:Java 中 GUI 设计和实现(zt) [Re: zoff] Copy to clipboard
Posted by: java_archon
Posted on: 2003-10-09 01:10

to SimonLei :
no, I am turning to B/S, so give up the Swing , AWT or SWT
为什么呢?
实际上我想B/S并不意味这就要用浏览器, 或者jsp什么的, 或struts.

我必须承认swing比较慢, SWT还没用过,不知道如何.
但我觉得用java中用swing做GUI更能体现出B/S的结构和思想.
jsp/struts的问题,我觉得是不能很好的建立 业务数据的概念.
不知你是否同意?

15.Re:Java 中 GUI 设计和实现(zt) [Re: zoff] Copy to clipboard
Posted by: kingwzb
Posted on: 2003-10-17 19:03


16.Re:Java 中 GUI 设计和实现(zt) [Re: zoff] Copy to clipboard
Posted by: hwx
Posted on: 2003-10-21 15:17

我个人的方法是,全部手工编写Gui代码,我不太喜欢用Gui生成工具。
对于比较简单的Gui,譬如一个Dialog,就一个类搞定。
如果比较复杂的Gui,则写一个XXXView类和一个XXXGui类,
把绘制Gui界面的代码放在XXXGui类中,其他的放在XXXView中(譬如一些listener)。
另外,有的Gui组件还需要Model类,则另外编写。
对整个应用而言,还需要一个到几个Controller类,也另外编写。

17.Re:Java 中 GUI 设计和实现(zt) [Re: zoff] Copy to clipboard
Posted by: yanwj
Posted on: 2003-10-21 22:42

我用swt&jface写了好多很复杂的界面,作法基本都是定义好所有的控件,然后控件的操作可以独立地考虑,界面布局90%用GridLayout,注意swt的GridLayout比swing的好用多了.这样,可以更改布局而不影响功能.现在我已不喜欢拖放的方式了,觉得手工写更方便,更灵活,缺点是机械劳动,有点让我想打嗑睡.

18.Re:Java 中 GUI 设计和实现(zt) [Re: zoff] Copy to clipboard
Posted by: zerol
Posted on: 2003-11-09 13:37

同意java_archon

19.Re:Java 中 GUI 设计和实现(zt) [Re: zoff] Copy to clipboard
Posted by: wolfsquare
Posted on: 2003-11-11 17:20

说到界面布局,用JB是最方便的了.在Panle上添加组件要有技巧,例如先设置为null或XYlayout来做粗略布局,然后切换为GridBaglayout...善用组件Copy&Paste等
,我几年来使用JB开发了很多界面,觉得比手工去调整位置什么的真是方便太多了.唯一希望改进的就是希望上面的组件可以和数据Model进行绑定.

20.Re:Java 中 GUI 设计和实现(zt) [Re: zoff] Copy to clipboard
Posted by: huangfei
Posted on: 2003-11-13 00:41

不用布局管理器不是挺好的吗?为什么一定要用布局管理器呢?


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923