`
BarryWei
  • 浏览: 66509 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

谁说Swing不适合做End Users Desktop应用来着?

    博客分类:
  • Java
阅读更多

(楼主添加于:2010-09-14

     没有想到过这个帖子会带来这么多的讨论、异议、无休止的争吵。还有更多“喜欢看打仗”的喷友们。

     这也让我见识到了一些事情,不记得是谁说过:Wen Ge 过去那么多年,可现在人们的思想比那个时候还可怕。)

 

很多人批评Swing做的东西很丑陋,并且需要需要jre才能运行,因此Swing不适合做桌面应用了!

 

在人们都在疯狂的崇拜web,除了生孩子之外所有的事情都放到了web上的时候,有这么一部分人,他们依旧对桌面应用情有独钟。我即使这么一个人。

 

Swing怎么玩?一个Frame,几个常用的组件,几个皮肤?不,这远远不是Swing的全部。如果你搞通了什么是MVC,你就会明白Swing的设计其实,是最经典的也是非常聪明的设计。当然,这里就不需要罗嗦这些了。有兴趣的童鞋们,除了看一些Swing布局和组件相关的书籍之外,强烈推荐<Swing Hacks>。在这里可以找到它相关的内容:http://oreilly.com/catalog/9780596009076/。

 

除此之外,今天来这里当然是想说说自己的东东,也算是一个广告吧。

 

快三个月之前老板给了一个任务:写文档并与其他同事分享。考虑过在公司内部搭建文档服务器,但是被抛弃了。不是有Google Docs可以使用吗?而且还支持在线编辑文档,能够与其他朋友分享维护,而且Google Docs还提供了版本控制。于是乎,便跑去Google Docs了。但是每次需要上传或者下载,或者分享文档的时候都需要打开浏览器,灰常的不方便。因此就满世界去找Google Docs的桌面版(也有一开始讲的那个原因在里面)。黄天不负苦心人,确实找到了一个很好用的软件,叫做Memeo Connect。但是那玩意儿竟然需要购买才可以使用。看看界面,也没什么了不起的。既然我用不起你的,我自己写一个还不行么!于是乎,经过两个月多一点的时间,就有了我这个100% Swing手写代码软件:iGoSyncDocs .(当当当当,善良登场。)

 

在Sourceforge上的位置:http://igosyncdocs.sourceforge.net/


在Google Code上的位置:http://code.google.com/p/igosyncdocs/

 

有兴趣的童鞋可以去看看,我把它给开源了,并写了一封email给Memeo Connect告诉他们,我的免费请使用我的。哈哈哈。

 

谈谈这个过程当中的一些收获。

 

Swing很完美。毫无置疑的是,在Swing中写代码你完全可以按照MVC的原则去看待所有的东西。组件本身、组件中的数据、数据的渲染,这三个部分被完完整整的分离了。数据来自于Model而需要显示不同的效果就去找相应的Renderer,实在是太方便啦。在这个过程当中才能体会到MVC的分离原则,是多么的伟大。

 

在界面方面,选择了大名鼎鼎的QuaquaLookAndFeel,因为我一直觉得防Mac的那个皮肤,确实让我看着很舒服。后来软件写成了之后有一个日本的网友在Mac上跑,抓了几张图出来给我看到,那玩意儿真的不错,嘿。

 

数据完全来自于Google Docs Service。里面使用了Google Document List API的一些jar,因为自己再去底层封装那些atom和feed实在太麻烦了,而且里面还要牵扯到共享文档,就是ACL的那些破东西,很是烦躁。因为一开始的时候就找到了Google已经封装好的东西直接拿来用,感觉功能很强大。但是,文档就差的要死。那注释写的估计写完了自己也没看懂是什么意思。哎。

 

得到了GoogleDocsService的数据之后,在本地显示。并且提供了上传、下载各种格式、和好友分享、并且直接点击文档即可打开浏览器访问相应的文档内容等功能。基本上,这些功能都是模仿那个收费的软件。

 

但也有几个头疼的地方:

1、写出来的代码完全硬代码,可维护性太差。如果需要更换界面的布局或者界面内容,需要重写一个类了。如果能够换成android那种方式多好啊。页面布局使用xml文件,需要修改的时候,只需要修改xml文件内容就好了。最近正在考虑这个事情,去下android的源代码看看这部分内容,自己写一个Swing的框架出来。有兴趣的童鞋可以一起来玩。

2、如何能够真正做到End User程序。也就是说,如果用户电脑中没有安装jre你也需要运行。如果要实现这功能只能把程序和jre一起打包才可以。程序本身只有4M左右,一个jre有80M,总不至于这样做吧?因此,就想到了给jre减肥。这几天正在想办法使用GreenJVM打包。GreenJVM是一个国产的很牛X的东东,才开始玩过段时间看看如何吧。除此之外,如果大家还有其他开源的或者免费的能够实现类似功能的东西,多多推荐。

 

最后,来一张特写给它:

 

iGoSyncDocs

 

Swing其实是可以很美的。哈哈哈哈哈。

 

 

分享到:
评论
34 楼 hardPass 2010-09-02  
BarryWei 写道
tonyshen277 写道
弱弱的问下:到底有多少人真正的需要跨平台,到底又有多少软件是正的跨平台?


难道你不希望你写的软件能够在所有操作系统上同时都能运行吗?
至少我是这么想的。而且这几年随着微软正版计划推行,估计盗版问题就比较严重了。
而且,所谓java程序员,我们几乎可以不用windows而完全在ubuntu上做开发了。
我倒是看到,这些日子以来ubuntu的用户越来越多了,当然,主要是个人用户,企业级的嘛,不好说。。。


呵呵,你是风儿,我是沙……

实在是太可爱啦!


那位仁兄讲的对啊,跨平台只是个梦.






33 楼 xlq208 2010-09-02  
<div class="quote_title">BarryWei 写道</div>
<div class="quote_div">
<div class="quote_title">xlq208 写道</div>
<div class="quote_div">
<p>都喝些茶,消消火。。。。<br>其实swing,还行,windows下表现的确实一般般,ubuntu底下还可以。<br>就是工具跟不上,netbean也在尽力,易用性与开发效率提高是个过程。<br>我更喜欢NimbusLookAndFeel 的皮肤。swing还是比较灵活的,比如说使用硬件加速(3D的,自己调,已移植到linux下了,mac没钱买没得测),有图有真相</p>
<p>过上几天可能基于web的RIA demo就要发布了,大家可以看看了。</p>
</div>
<p> </p>
<p>NimbusLookAndFeel是jdk6u19以后的产物吧,我也很喜欢,那皮肤真的看着很不错的。</p>
<p>除此之外,还有一个开源的皮肤,SeaglassLookAndFeel,看着也很不错哦。</p>
<p>顶一个,你的界面很帅气。右边那个室内效果图?手写全部代码?还是用了框架?比如:JMoney之类的?</p>
</div>
<p>核心开发了2年多,swing代码全手写,其实javaer手感都相当的好。。。。几乎是web开发模式导致的,哈哈。</p>
<p>不是基于JMoney,基于jogl,引擎自己搭建的。</p>
32 楼 ray_linn 2010-09-02  
BarryWei 写道
tonyshen277 写道
弱弱的问下:到底有多少人真正的需要跨平台,到底又有多少软件是正的跨平台?


难道你不希望你写的软件能够在所有操作系统上同时都能运行吗?
至少我是这么想的。而且这几年随着微软正版计划推行,估计盗版问题就比较严重了。
而且,所谓java程序员,我们几乎可以不用windows而完全在ubuntu上做开发了。
我倒是看到,这些日子以来ubuntu的用户越来越多了,当然,主要是个人用户,企业级的嘛,不好说。。。



年轻人,野心别那么大。
31 楼 BarryWei 2010-09-02  
<div class="quote_title">xlq208 写道</div>
<div class="quote_div">
<p>都喝些茶,消消火。。。。<br>其实swing,还行,windows下表现的确实一般般,ubuntu底下还可以。<br>就是工具跟不上,netbean也在尽力,易用性与开发效率提高是个过程。<br>我更喜欢NimbusLookAndFeel 的皮肤。swing还是比较灵活的,比如说使用硬件加速(3D的,自己调,已移植到linux下了,mac没钱买没得测),有图有真相</p>
<p>过上几天可能基于web的RIA demo就要发布了,大家可以看看了。</p>
</div>
<p> </p>
<p>NimbusLookAndFeel是jdk6u19以后的产物吧,我也很喜欢,那皮肤真的看着很不错的。</p>
<p>除此之外,还有一个开源的皮肤,SeaglassLookAndFeel,看着也很不错哦。</p>
<p>顶一个,你的界面很帅气。右边那个室内效果图?手写全部代码?还是用了框架?比如:JMoney之类的?</p>
30 楼 xlq208 2010-09-02  
<p>都喝些茶,消消火。。。。<br>其实swing,还行,windows下表现的确实一般般,ubuntu底下还可以。<br>就是工具跟不上,netbean也在尽力,易用性与开发效率提高是个过程。<br>我更喜欢NimbusLookAndFeel 的皮肤。swing还是比较灵活的,比如说使用硬件加速(3D的,自己调,已移植到linux下了,mac没钱买没得测),有图有真相<br><br><img src="http://dl.iteye.com/upload/attachment/302272/3914ed89-ee3b-3fa6-949a-f25cae56b173.jpg" alt=""></p>
<p>过上几天可能基于web的RIA demo就要发布了,大家可以看看了。</p>
29 楼 BarryWei 2010-09-02  
geminiyellow 写道

做Swing也有一年多时间了,SwingHack那书是不错。
Swing在Eclipse上面跑,说实话,VE,WindowBuilder也相当不错了。再么用netbeans,这样的IDE也达到了VS2005~08的界面开发水平了。甚至有的地方我都觉得比Vs好。当你用WPF/silverlight 的话,VS 2005 ~2010 对于你所说的可视化操作,其实也就那么一回事。直到Blend这系列东西出来稍微有点改观。
鱼的说法我同意,Swing,用来做研究学习,用来做自己喜欢做的东西的时候,很好。而且我也有Swing情结。大家批Swing的时候我会来反驳。但是问题是做开发的话,对不起,真的有差距。就像sun一样。


同意你的看法,但是netbeans比起vs系列来说,我认为还差的太远了。
而且说实话,比起netbeans,我认为window builder插件都好用多了,确实不是很喜欢netbeans。
估计这玩意儿,除了sun内部员工之外,普及率不是那么的高吧。
还是喜欢eclipse,连写个c++都会用这东西呢。

引用
Swing,用来做研究学习,用来做自己喜欢做的东西的时候,很好。而且我也有Swing情结。大家批Swing的时候我会来反驳。但是问题是做开发的话,对不起,真的有差距。就像sun一样。


确实如此。iGoSyncDocs是我业余的爱好,没想过这东西拿来当作商业软件使用,只是很久没写swing代码,想起来也应该动手了,所以就写下去了。
28 楼 BarryWei 2010-09-02  
tonyshen277 写道
弱弱的问下:到底有多少人真正的需要跨平台,到底又有多少软件是正的跨平台?


难道你不希望你写的软件能够在所有操作系统上同时都能运行吗?
至少我是这么想的。而且这几年随着微软正版计划推行,估计盗版问题就比较严重了。
而且,所谓java程序员,我们几乎可以不用windows而完全在ubuntu上做开发了。
我倒是看到,这些日子以来ubuntu的用户越来越多了,当然,主要是个人用户,企业级的嘛,不好说。。。
27 楼 tonyshen277 2010-09-02  
弱弱的问下:到底有多少人真正的需要跨平台,到底又有多少软件是正的跨平台?
26 楼 geminiyellow 2010-09-02  
BarryWei 写道
ray_linn 写道
经过两个月多一点的时间

---- 这就是为什么大家烦swing的原因


这么久因为我还要上班,基本上都是每天下班回去写一段时间,一般2到3个小时左右。
除此之外,中间还有一个星期多的时间因为工作原因,彻底停下来了。

不过,开发速度确实慢,我认为主要还是ide的问题,如果java界出现像VS2005或vs2008那样的工具,或许会不一样。
总之,这也确实是大家烦swing的众多原因之一吧。

做Swing也有一年多时间了,SwingHack那书是不错。
Swing在Eclipse上面跑,说实话,VE,WindowBuilder也相当不错了。再么用netbeans,这样的IDE也达到了VS2005~08的界面开发水平了。甚至有的地方我都觉得比Vs好。当你用WPF/silverlight 的话,VS 2005 ~2010 对于你所说的可视化操作,其实也就那么一回事。直到Blend这系列东西出来稍微有点改观。

鱼的说法我同意,Swing,用来做研究学习,用来做自己喜欢做的东西的时候,很好。而且我也有Swing情结。大家批Swing的时候我会来反驳。但是问题是做开发的话,对不起,真的有差距。就像sun一样。
25 楼 jaedong 2010-09-02  
鱼言风语 写道
jaedong 写道
不喜欢swing你可以不看啊.



你说的好啊,我的回帖你不喜欢可以不看啊


哪你就远离这个贴子,没有建议的话。
24 楼 xlq208 2010-09-02  
鱼言风语 写道
BarryWei 写道
鱼言风语 写道


不想指点你,不会指望你会虚心接受,我也懒得用Mono做你那个的Demo,我相信1天就能搞定(包括了下载Mono Develop,安装环境等杂七杂八的事情)

界面做的太多了,Mono支持的WinForm和WPF,这两种界面系统和Swing的开发速度是有数量级差别的。

Sun的Swing做的不好,开发人员太学院气了。


我这是在虚心接受你的意见,希望你能道出其中的意思,你呢?
认为我有学院气?仅仅因为我刚才说了Mono不好的话?
如果你可以使用VS2008去做WinForm,可以在.NET上跑,一个字都可以不换就能在Mono上跑,那我可以承认。
如果不是这样呢,那就不是一回事了。
这个软件,我只在eclipse下手写代码完成(完全可以安装可视化的插件,但我没有),只是想练手而已。
而且,在windows上开发的时候考虑了可能会跨平台的问题,有一些特定平台的东西没有使用。
因此,这个jar完全可以在所有平台上任意使用。
我自己在windows上开发,测试过了之后再放到ubuntu上做了测试,没有什么问题。
请问,.NET和Mono上可以这样吗?



我可没有说你有学院气,看贴请仔细。。。

你说的在Windows上开发,在ubuntu跑,Mono肯定可以做到的,我懒得装ubuntu,有空我写个mono程序,你在你环境上跑一下


没运行就肯定能跑,兄台,拍脑门是不合理的。。。。
23 楼 BarryWei 2010-09-02  
鱼言风语 写道


我可没有说你有学院气,看贴请仔细。。。

你说的在Windows上开发,在ubuntu跑,Mono肯定可以做到的,我懒得装ubuntu,有空我写个mono程序,你在你环境上跑一下


好的,很期待。看看如何。
22 楼 鱼言风语 2010-09-02  
http://mono-project.com/DistroPackages/Ubuntu

这个是Ubuntu上的Mono版本说明,你有兴趣可以先检查一下自己的Ubuntu环境上Mono装好了没有

我周末写个mono程序发给你
21 楼 鱼言风语 2010-09-02  
BarryWei 写道
鱼言风语 写道


不想指点你,不会指望你会虚心接受,我也懒得用Mono做你那个的Demo,我相信1天就能搞定(包括了下载Mono Develop,安装环境等杂七杂八的事情)

界面做的太多了,Mono支持的WinForm和WPF,这两种界面系统和Swing的开发速度是有数量级差别的。

Sun的Swing做的不好,开发人员太学院气了。


我这是在虚心接受你的意见,希望你能道出其中的意思,你呢?
认为我有学院气?仅仅因为我刚才说了Mono不好的话?
如果你可以使用VS2008去做WinForm,可以在.NET上跑,一个字都可以不换就能在Mono上跑,那我可以承认。
如果不是这样呢,那就不是一回事了。
这个软件,我只在eclipse下手写代码完成(完全可以安装可视化的插件,但我没有),只是想练手而已。
而且,在windows上开发的时候考虑了可能会跨平台的问题,有一些特定平台的东西没有使用。
因此,这个jar完全可以在所有平台上任意使用。
我自己在windows上开发,测试过了之后再放到ubuntu上做了测试,没有什么问题。
请问,.NET和Mono上可以这样吗?



我可没有说你有学院气,看贴请仔细。。。

你说的在Windows上开发,在ubuntu跑,Mono肯定可以做到的,我懒得装ubuntu,有空我写个mono程序,你在你环境上跑一下
20 楼 BarryWei 2010-09-02  
鱼言风语 写道


不想指点你,不会指望你会虚心接受,我也懒得用Mono做你那个的Demo,我相信1天就能搞定(包括了下载Mono Develop,安装环境等杂七杂八的事情)

界面做的太多了,Mono支持的WinForm和WPF,这两种界面系统和Swing的开发速度是有数量级差别的。

Sun的Swing做的不好,开发人员太学院气了。


我这是在虚心接受你的意见,希望你能道出其中的意思,你呢?
认为我有学院气?仅仅因为我刚才说了Mono不好的话?
如果你可以使用VS2008去做WinForm,可以在.NET上跑,一个字都可以不换就能在Mono上跑,那我可以承认。
如果不是这样呢,那就不是一回事了。
这个软件,我只在eclipse下手写代码完成(完全可以安装可视化的插件,但我没有),只是想练手而已。
而且,在windows上开发的时候考虑了可能会跨平台的问题,有一些特定平台的东西没有使用。
因此,这个jar完全可以在所有平台上任意使用。
我自己在windows上开发,测试过了之后再放到ubuntu上做了测试,没有什么问题。
请问,.NET和Mono上可以这样吗?
19 楼 鱼言风语 2010-09-02  
BarryWei 写道
鱼言风语 写道
为什么有的人总是那么狭隘?

你首先是一个Developer,再是一个Javaer

Java有它适合做的,也有它不适合的

“完美”这种词要慎用


萝卜青菜各有所爱,不是吗!



这是搞开发,不是请客吃饭,谢谢
18 楼 鱼言风语 2010-09-02  
jaedong 写道
不喜欢swing你可以不看啊.



你说的好啊,我的回帖你不喜欢可以不看啊
17 楼 鱼言风语 2010-09-02  
BarryWei 写道
鱼言风语 写道


你确认你了解mono了吗?


额,我说错话了,因为我不了解。我没有发言权。
望兄能多多指点。



不想指点你,不会指望你会虚心接受,我也懒得用Mono做你那个的Demo,我相信1天就能搞定(包括了下载Mono Develop,安装环境等杂七杂八的事情)

界面做的太多了,Mono支持的WinForm和WPF,这两种界面系统和Swing的开发速度是有数量级差别的。

Sun的Swing做的不好,开发人员太学院气了。
16 楼 jaedong 2010-09-02  
不喜欢swing你可以不看啊.
15 楼 BarryWei 2010-09-02  
鱼言风语 写道
为什么有的人总是那么狭隘?

你首先是一个Developer,再是一个Javaer

Java有它适合做的,也有它不适合的

“完美”这种词要慎用


萝卜青菜各有所爱,不是吗!

相关推荐

    Swing全部组建应用实例

    6. **可装饰性(Decorations)**:Swing提供了轻量级组件,与AWT相比,它们不依赖于操作系统的GUI,因此可以在任何平台上保持一致的外观。此外,Swing还支持LookAndFeel,可以更改应用程序的整体风格,使其看起来像...

    swing 应用程序框架

    Swing的一个显著特点是其轻量级特性,因为它不依赖于操作系统提供的GUI控件,而是使用Java实现,这使得Swing应用在不同平台上有一致的用户体验。此外,Swing支持模态和非模态对话框,以及多种布局管理器,如...

    graalvm编译swing失败问题处理

    总的来说,处理“graalvm编译swing失败”问题需要对GraalVM的原生图像构建机制有深入理解,以及对Swing应用的架构和依赖管理的熟悉。通过调试和配置,开发者可以成功地将Swing应用编译为高效、独立的原生可执行文件...

    swing-desktop-starter:示例Swing桌面应用程序

    swing-desktop-starter-1.0.0 Swing桌面应用程序示例 描述 一个示例的Swing桌面应用程序/ MDI(多文档界面)可帮助开发人员快速启动新项目...该应用程序已预先配置了Maven,Log4j和resources文件夹下的自动加载属性...

    Swing组件应用实例

    Swing提供了一系列丰富的组件,用于构建功能强大的桌面应用程序。在本实例中,我们将深入探讨Swing组件的使用,通过具体的代码示例帮助你理解和掌握它们。 首先,Swing组件库包括基础组件,如按钮(JButton)、...

    swing 新应用

    在本文中,我们将深入探讨Swing的新应用及其在现代开发中的重要性。 Swing是在Java 1.2版本中引入的,作为AWT(Abstract Window Toolkit)的替代品,提供了一个更丰富的组件集合和更好的跨平台兼容性。Swing组件是...

    swing教程 swing教程

    Swing 教程 Swing 简介 ...Swing 广泛应用于 Java 的 GUI 开发,例如创建复杂的 GUI 界面、实现跨平台的 GUI 应用程序等。 Swing 的优点 Swing 的优点包括跨平台、轻量级、灵活性强、可扩展性强等。

    JavaSwing常用组件的应用

    Java Swing常用组件的应用,更快Swing入门

    LiSheDaChuan-RemoteDesktop-Client-master_JavaSwing_RemoteDesktop

    总之,“LiSheDaChuan-RemoteDesktop-Client-master_JavaSwing_RemoteDesktop”项目是一个全面的实践教程,涵盖了JavaSwing应用开发、网络通信、图像处理等多个领域的知识。通过学习和实践这样的项目,开发者不仅...

    一些Swing应用实例Java源码包

    Swing是Java GUI(图形用户界面)库的重要组成部分,它为开发者提供了丰富的组件和功能,用于构建美观且功能强大的桌面应用程序。在这个“一些Swing应用实例Java源码包”中,我们可以深入学习和理解Swing的各种组件...

    swing界面美化包

    Swing是Java提供的一种用于构建图形用户界面(GUI)的库,它允许开发者创建美观、交互性强的应用程序。在默认情况下,Swing组件的外观可能显得较为朴素,但通过一些特殊的技术,我们可以对其进行美化,使其更具吸引...

    java Swing 中调用摄像头拍照源码(有说明)

    在Java编程环境中,Swing库提供了丰富的组件和功能来构建桌面应用程序。其中一个有趣的应用场景是利用Swing调用系统的摄像头进行拍照。以下是对标题“java Swing 中调用摄像头拍照源码(有说明)”和描述的详细解释...

    swing项目应用总结

    在Java编程领域,Swing是用于构建图形用户界面(GUI)的一个强大库,它提供了丰富的组件和工具,使得开发者能够创建功能丰富的桌面应用程序。本文将深入探讨“Swing项目应用总结”,并结合提供的标签“源码”和...

    Swing应用程序的加载动画示例

    该应用是演示怎样使用多线程来显示一个Swing应用的加载动画。主要是使用JProgressBar和Timer来实现。目的是让比较复杂的Swing应用启动时解决延迟的状态,以提供友好的使用感。 阅读对象:使用Swing开发应用的学员。

    Java Desktop_java_javaDesktop_desktop_

    "Java Desktop_java_javaDesktop_desktop_"这个标题暗示了我们即将探讨的是关于使用Java进行桌面应用开发的知识点。描述中的"java develop for desktop"进一步确认了这一主题,即如何使用Java语言来构建桌面应用程序...

    j2ee的应用-swing组件介绍

    Swing组件的一个重要特点是轻量级,这意味着它们不依赖于操作系统特定的图形库,因此可以在不同的操作系统上保持一致的外观和行为。此外,Swing还提供了可定制的外观,称为LookAndFeel,可以改变整个应用程序的视觉...

    swing 应用框架 1.3 英文版 API

    Swing应用框架1.3英文版API是Java开发中用于构建图形用户界面(GUI)的重要工具,它基于Java Foundation Classes (JFC) 并且扩展了AWT(Abstract Window Toolkit)库,提供了更为丰富的组件和功能。这个API文档通常...

    解决swing白屏问题的jjre

    Swing是Java GUI库的一部分,用于构建桌面应用程序。在某些情况下,用户可能会遇到“白屏”问题,这通常是由于Swing组件渲染不正确或者与Java运行时环境(JRE)的兼容性问题导致的。标题提到的“解决swing白屏问题的...

    swing不确定进度条

    在Java编程环境中,Swing库提供了...以上是关于"Swing不确定进度条"的知识点介绍,希望对你理解如何在Java Swing应用程序中使用不确定进度条有所帮助。在实际开发中,可以根据具体需求进行调整和优化,提升用户体验。

Global site tag (gtag.js) - Google Analytics