`
xiaozhonghua
  • 浏览: 250662 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Swing第四刀:代码尽散换芳华

阅读更多

吵吵闹闹的世界杯结束了,西班牙人终于如愿以偿。回顾整个杯赛,花里胡哨的队伍都未能走到最后,反而强调整体性和纪律性的队伍占据了四强。足球是11个人的运动,这一简单的足球运动真理看来还没有被所有人深刻的认识到。

 

为什么西班牙能夺冠?“我们很淡定,敌人比我们还淡定;我们淡定是因为我们不怕死,敌人淡定是因为他们不怕我们死”。赛后荷兰主帅这样解释失败原因。不过罗本两次单刀两次裸奔,又能怨谁呢?

 

由于项目繁忙又加上世界杯看球,《Swing大刀》系列中提到的项目源码一拖再拖,如今终于整理完毕给大伙送上。其实中间很多代码都是在边看球边写的,有点心不在焉,不过仅供参考,献丑一下也无妨。

 

源码中的类不多,分为两个包:一个是free.*,一个是free.test.*。其中free.*这个包是整个小框架的核心代码和类,其image子目录是其中用到的各种资源图片。free.test.*则是对框架的使用示例,包括一些相关图片资源。也就是说,free.*可以认为是“产品级别”的,而free.test.*则是“项目级别”的,是框架使用的一个例子。整个框架的初衷和解释在以前博文中有所阐述,此处不再重复。

 

这些代码从公司的一个预研项目中抽出。根据中华人民共和国国务院2000年6月25日颁布的《鼓励软件产业和集成电路产业发展的若干政策》(18号文件)及2002年7月24日发布的《振兴软件产业行动纲要(2002年至2005年)》(47号文件)规定的由国家扶持的软件产业风险投资公司和投资基金(至今尚未组建)的精神,以及“共享、共有、共富、共赢”的四项基本原则、“软件还是开源好”的基本国策、“今天,你免费了没?”的行规,代码的package修改为了free.*;主要的类也一律Free***来命名,以此充分体现响应国家号召、遵守行业政策的精神。例如,FreeToolBar就是工具条,FreeProgressBar就是进度条,等等。大家可自行研究。

 

free包下的Shell.java是整个小框架的设计初衷:做一个现成的界面风格和布局,用XML来配置其内容(例如菜单、工具条、模块栏、功能列表等等,具体XML见free目录下的几个xml示例文件)。所以可以直接运行这个类(有main函数),可以得到《Swing第一刀》中的示例。此外,运行FreeLoginUI.java即可得到《Swing第三刀》中的登录界面,等等。

 

代码很简单,也很干净,由于从公司项目抽出,很多注释都被我去掉,以避免不必要的麻烦。相信以大家的聪明才智加上俺的规范命名,不会造成什么阅读困难。不过关于代码的使用还有以下注意事项,请大家注意:

 

 

  1. 代码仅供参考和相互学习。现在软件行业(甚至各行各业)抄袭成风、愈演愈烈,以至于某个公司每次说“我们的**数据库**操作系统是完全国产、完全自主创新、完全的自主知识产权”,我们程序员就都会心的笑了。但是我还是不建议把这套代码直接用在自己的项目上,尤其原封不动的照搬,总不是件好事。以后俺家的ERP和你家的ERP去同一个客户那去竞标,show出来一看:阿娇和阿萨,撞衫而死,岂不尴尬!非要用,怎么也得修改一下图片资源、简单的颜色、字体风格吧,相似度降低到大S和小S就行了,聪明人更会弄的不露痕迹,所谓“去其糟粕、取其精华”嘛。相信大家会处理好。
  2. 关于JGoodies和TWaver。代码中涉及到一些JGoodies和TWaver的使用和相关代码,以前解释过原因,这里再重申一下。JGoodies是一个免费的LnF,TWaver是一个商业的Swing组件库(试用版本是可以免费用的有个水印而已)。两个东东在这里都不是必须使用的。他们的存在仅仅是因为我们公司项目的具体需要,我也就没有花很多时间去除他们的使用代码。在《Swing第二小刀刀:星星之火可以燎原》一文里,xujunJ2EE同学已经成功的去除了这些第三方类库的相关代码并提供了源代码,相信对大家会有所帮助。还是那句话:哥散的不是代码,是思想;哥你看的也不是源码,是火花。哈!
  3. 代码的更新:这个框架会持续改进,代码也会持续更新。不过由于这是一个公司内部项目,所以本人不能保证以后还能持续更新、改进和发布这批代码;不过相关的技术思路都会在后续的文章中共享,相信大家也完全可以自己来实现代码的改进。
  4. 欢迎大家一起学习和讨论,共同进步,无论是玩Java Swing的,还是Web的,还是.NET的,还是Flex的。谩骂和攻击总不是让人很舒服的事,尤其在自己“未作恶”的情况下,就尤显得委屈。况且,谩骂绝不是战斗,反而有点懦弱和胆怯的表现,于我们的学习和进步毫无益处。本人尊重所有人、所有技术、所有流派、所有思想,并一向本着“不做作、不忽悠”的做人原则,也希望获得大家的支持鼓励和批评建议。
有人说你这代码散了岂不可惜?确实没什么可惜的。岂不说这里本就没什么高深的技术奥秘,就算有,如能让大家更多的了解Java和Swing以及一些UI设计和编程技巧,改变一点对Java和Swing的偏见和看法,或者能换回更多的共同进步之“满地芳华”,那岂不更是人生之更大乐事么?

哎哎,说你那,在那别罗利巴索唠唠叨叨半天了,散个代码,你哪那么多废话啊?!
欧克,欧克(注:火星语,OK之意)。代码在下方。goodies.jar和twaver.jar请在我博客的前面文章中下载,不再重复提供。有任何疑问请在论坛回复留言。

祝大伙编程愉快!

 

  • src.zip (431.8 KB)
  • 下载次数: 4613
分享到:
评论
66 楼 sdujava2011 2013-08-22  
Java刚入门,看了受益匪浅,要支持下
65 楼 Liverpool_IT 2012-03-27  
运行了一下您的程序,背景面板没有透明显示,这是怎么回事啊????
64 楼 mayi140611 2011-11-19  
欧克
63 楼 zhangjialu_vip 2011-08-28  
楼主 是这样的,我swing能力不好,有时候做的点小功能之后总想加点界面,可是swing的控制能力。在阅读楼主的博客里面找到了NetBeans 软件,心里一阵狂喜。
但是在对界面的修饰欠缺,界面不好看。看到楼主的做的swing界面很不错,就想问问有没有关于界面的美化提供的帮助的,这里谢谢了。
62 楼 bgc525725278 2011-01-04  
在lz的代码面前我感觉到我的swing代码是那么的苍白无力!呵呵,看了lz的代码感觉很振奋啊!决定深入研究!
61 楼 一点触发 2010-12-15  
楼主高手,小弟佩服!! 小弟是新手,请教一下,在eclipse 下运行您的代码,import twaver.TWaverUtil 会报错,提示找不到,以前没接触过twaver,请教一下twaver.jar怎么用了??小弟先谢谢了
60 楼 pengranxiang 2010-12-15  
非常精彩。。。。。期待更多刀。。。。

楼主在 FreeLoginUI中有个输入密码的地方, 在里面输入文字后,显示为原文。

从代码中有个地方可以修改一下, 就可以变为 密码显示样式了。

原图


在 Free.FreePasswordField.java 类里面

原文:

private void init() {
        this.setBorder(border);
        this.setUI(new MetalTextFieldUI() {

            @Override
            protected void paintBackground(Graphics g) {
                Graphics2D g2d = (Graphics2D) g;
                g2d.setPaint(paint);
                g2d.fillRect(0, 0, getWidth(), getHeight());

                //paint left side image.
                g2d.drawImage(backgroundLeftImage, 0, 0, null);

                //paint right side image.
                g2d.drawImage(backgroundRightImage, getWidth() - backgroundRightImage.getWidth(null), 0, null);
            }
        });

        this.setFont(font);
    }


将setUI 里面的类,修改为 BasicPasswordFieldUI 即可
修改后
private void init() {
        this.setBorder(border);
        this.setUI(new BasicPasswordFieldUI() {

            @Override
            protected void paintBackground(Graphics g) {
                Graphics2D g2d = (Graphics2D) g;
                g2d.setPaint(paint);
                g2d.fillRect(0, 0, getWidth(), getHeight());

                //paint left side image.
                g2d.drawImage(backgroundLeftImage, 0, 0, null);

                //paint right side image.
                g2d.drawImage(backgroundRightImage, getWidth() - backgroundRightImage.getWidth(null), 0, null);
            }
        });

        this.setFont(font);
    }


59 楼 wensefu 2010-10-14  
楼主牛人,可以考虑出书啦
58 楼 wyx065747 2010-09-23  
楼主,太崇拜你了!!!谢谢你共享的源代码!!
57 楼 vaniice 2010-09-07  
嗯,楼主的精神真的很佩服,因为目前要使用TWaver网管系统,您的文章给了我许多帮助,在此衷心表示感谢,提一个比较低级的文帝,您用的TWaver开发包是3.5版本的吗?
56 楼 chenxin130 2010-08-31  
谢谢,国内像lz这样有热情和热心的程序员太少了
55 楼 itlangqun 2010-07-25  
楼主精神可嘉啊。支持楼主的开源行为。也感谢楼主的分享。
54 楼 尘土飞扬 2010-07-20  
free的精神,在xiaozhonghua手下,得到了有效的发扬
53 楼 lcllcl987 2010-07-19  
xiaozhonghua 写道
sefcertyu 写道
楼主在开发swing项目的时候会使用的三方的MVC框架吗,还是就根据swing本身的MVC优点不用MVC框架

您指的第三方的MVC是类似哪些?我觉着Swing就MVC的很彻底了。除了公司使用TWaver之外,自己封装一点简单的结构就行了,不需要用很多第三方的东西。

感觉MVC也好,设计模式也好,彻底掌握了之后就会熟练的应用在每行代码里面。就像我们天天吃红绕肉,把猪大油融入了血液,自然会不知不觉的在额头上渗出油来,而不必告诉周围的妹妹'我很有钱的'。当然,打架对方拳头离我们鼻子还有1公分的时候,我们也不会先想凌波微步怎么运气、降龙十八掌的口诀、少林拳的预备姿势,轻灵一闪看准了他的大鼻子使劲揍就行了,所谓无招胜有招。不过本人特老实从不宣传暴力解决问题,骂几句就行了,最多在他脸上吐口黄黄的浓痰呗。

如果写完代码尚根本不意识这是****模式、MVC、MVP,完全是“顺理成章、一气呵成”,那境界就不一样了。

浓痰也不是时刻都有的, 需要有个Cache系统。
52 楼 luojihaidao 2010-07-16  
birdbiena 写道
WEB做了三年了,可是还是觉得你写的这种东西卖点要大的多,最好的就是WEB连接客户端综合使用(根据业务),下载了你的代码决定重新学习一下Swing。

在次感谢楼主的启迪(对于我来说)吧!


同感
51 楼 luojihaidao 2010-07-16  
必须给楼主砸起~
50 楼 sefcertyu 2010-07-15  
xiaozhonghua 写道
sefcertyu 写道
楼主在开发swing项目的时候会使用的三方的MVC框架吗,还是就根据swing本身的MVC优点不用MVC框架

您指的第三方的MVC是类似哪些?我觉着Swing就MVC的很彻底了。除了公司使用TWaver之外,自己封装一点简单的结构就行了,不需要用很多第三方的东西。

感觉MVC也好,设计模式也好,彻底掌握了之后就会熟练的应用在每行代码里面。就像我们天天吃红绕肉,把猪大油融入了血液,自然会不知不觉的在额头上渗出油来,而不必告诉周围的妹妹'我很有钱的'。当然,打架对方拳头离我们鼻子还有1公分的时候,我们也不会先想凌波微步怎么运气、降龙十八掌的口诀、少林拳的预备姿势,轻灵一闪看准了他的大鼻子使劲揍就行了,所谓无招胜有招。不过本人特老实从不宣传暴力解决问题,骂几句就行了,最多在他脸上吐口黄黄的浓痰呗。

如果写完代码尚根本不意识这是****模式、MVC、MVP,完全是“顺理成章、一气呵成”,那境界就不一样了。


-- 当然用第三方的框架主要是为了开发的效率
比如说有一些第三方的框架如 Spring Rich Client,
scope http://sourceforge.net/projects/scope
以及OpenSwing等 http://oswing.sourceforge.net/

同时楼主的系统与服务器之间的通信呢,JDBC,RMI ,Httpinvoker,hessian?
49 楼 birdbiena 2010-07-14  
WEB做了三年了,可是还是觉得你写的这种东西卖点要大的多,最好的就是WEB连接客户端综合使用(根据业务),下载了你的代码决定重新学习一下Swing。

在次感谢楼主的启迪(对于我来说)吧!
48 楼 CodingMouse 2010-07-14  
感谢分享!但最好还是继续磨这把刀,如果停下来不磨,锈迹斑斑就不好了。
47 楼 xiaozhonghua 2010-07-14  
sefcertyu 写道
楼主在开发swing项目的时候会使用的三方的MVC框架吗,还是就根据swing本身的MVC优点不用MVC框架

您指的第三方的MVC是类似哪些?我觉着Swing就MVC的很彻底了。除了公司使用TWaver之外,自己封装一点简单的结构就行了,不需要用很多第三方的东西。

感觉MVC也好,设计模式也好,彻底掌握了之后就会熟练的应用在每行代码里面。就像我们天天吃红绕肉,把猪大油融入了血液,自然会不知不觉的在额头上渗出油来,而不必告诉周围的妹妹'我很有钱的'。当然,打架对方拳头离我们鼻子还有1公分的时候,我们也不会先想凌波微步怎么运气、降龙十八掌的口诀、少林拳的预备姿势,轻灵一闪看准了他的大鼻子使劲揍就行了,所谓无招胜有招。不过本人特老实从不宣传暴力解决问题,骂几句就行了,最多在他脸上吐口黄黄的浓痰呗。

如果写完代码尚根本不意识这是****模式、MVC、MVP,完全是“顺理成章、一气呵成”,那境界就不一样了。

相关推荐

Global site tag (gtag.js) - Google Analytics