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 呵呵,我去年写的老帖子,没想到还有人提起来。 最开始贴在这里: 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. |
5.Re:Java 中 GUI 设计和实现(zt) [Re: SimonLei] | Copy to clipboard |
Posted by: mazalet Posted on: 2003-08-04 16:53 SimonLei wrote: 准备另开发一个替代它? |
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 |