谁有一些评论Swing的文章的地址一直在学习Swing,发现了一个现象。如果认为自己是在学设计十分优雅,极具扩展,nb无比的,很有前途的东西,精神头立刻就来了。当然,如果碰到狂贬Swing的文章,俺就用批判的眼光看--尽量少相信吧,呵呵。不是俺偏激,也不是盲目的崇拜,只是既然入了java这个阵营,就学精这一门,广博还不如精深,当然咱也精不到哪里去,呵呵。搞技术的,当然俺说的是一般的搞技术的人,技术狂人,牛人除外,都是在不断的欺骗自己,告诉自己学的东西还是比较先进的,然后在自己学习的成就感中慢慢前进。然后发现自己不行,在回来学。呵呵希望大家可以提供一些。url,文章皆可。
中英文皆宜!!!
希望对学习Swing的同仁有帮助,感谢大家!!!
中英文皆宜!!!
希望对学习Swing的同仁有帮助,感谢大家!!!
解决方案 »
- java以http post object方式发送,play framework接收
- 匿名内部类的对象能在外部类中创建吗?
- 添加数据代码
- 请问谁有采用k-均值方法进行聚类的java程序实现呢?
- 在这个小程序中,我想测试一下init(),start(),stop(),destroy()这几个方法的功能,但是...
- 做JTREE遇到的问题~
- /**小妹lily**/ JavaTM 2 Runtime Environment (J2RE)和JavaTM 2 Software Development Kit (J2SDK)有什么区别?
- 在Web环境下SQL Server存储过程返回结果集如果需要滚动就出错:Error setting up static cursor cache。而在普通应用中中正常
- 诸位高手救我!!!
- 程序运行不了
- 如何用Java更改Windows的系统时间?
- 寻免费的JAVA安装程序制作工具
Swing是一个设计优秀的Java包,它充满了大师的智慧,不管你的项目是否用到了Swing技术,我都要说,Swing是一个设计优秀的Java包,它充满了大师的智慧。如果你学了Java却连一个Button还不会写,就象你学习Visual Basic却不会用Button,那可绝对是不能被原谅的。Swing技术的应用已经在国外大行其道,由于java的免费、易学以及大家对于java技术的充分信赖,好多公司早早的就把应用程序的一切,从后台服务到前台人机交互界面,统统移到了java开发上。Swing出现了快10年了,凭借其先进的设计思想,一直未曾落后于哪种语言的界面开发技术,使用和理解Swing的设计思想,对软件开发者大有裨益。 Swing的设计是MVC的典范。虽然MVC的概念有点泛滥,可是真正能够理解并熟练掌握、在设计和开发里面自然流露的并不多见。记得用VC++开发程序时候,MFC向导也是生成Document和View两个类,当时一直奇怪为什么这么绕圈子。再看Swing的设计,则到处充满了MVC的痕迹。仔细研究Swing中事件监听、Model-View分离、Renderer/Editor机制、可插拔的LookAndFeel等机制,简直就是一门艺术,充满了美感。而如果你非常痛恨这些设计并觉得他们怪异,很可能你是刚从VB或者Delphi转过来,这些快速开发工具帮助了你也“害”了你。 Swing设计的不错,不过可能过度学术化的设计也使得Swing跑起来并不灵巧,学习难度也大。这客观上确实使得Swing一直没有被广泛使用,而且广受诟病。记得以前“Swing有什么成功的应用吗?”之类的帖子一直是热门话题。IBM等则趁机抓住小辫子弄了SWT吸引了不少人,使得Java GUI技术面临分裂的危险。 不过随着JAVA的不断升级和优化,Swing的速度一直在提高,美观性也在改善,基于Swing的成功应用也越来越多了。关于Swing是否消亡或被SWT代替或是否能作桌面应用的争论逐渐少了。不过喜欢并精通Swing技术的开发者,尤其在国内,依旧非常少。 好在情况在转好。Sun正意识到Eclipse和SWT所带来的威胁,下了大力气发展NetBeans,其最新版本对Swing GUI可视化设计的支持已经超过了所有对手,其Rich Client框架也走向成熟,这对Swing的发展和应用是一个很大的推动。随着WEB热潮的减退,人们又更多的开始理性的思考B/S和C/S架构的选择,某些领域Swing技术已经成为首选的解决方案。随着JGoodies、JIDE、TWaver等优秀Swing产品的不断涌现,Swing会以更快速度在桌面应用中普及。
学好技术,都是为了祖国建设吗,有的就发了
带所有学习Swing的兄弟感谢大家!!!
这位同学写的不错
恩,确实不错
谢谢谢谢
有的兄弟继续发啊!!!
http://www.rcp.org.cn/bbs_topic.do?forumID=1&postID=94
在发个
http://blog.sina.com.cn/u/4b6047bc010006rc#sort_3
我写的,不知道美不美!
其实话说回来,在局域网和intranet领域,还是C/S好使。所以在业界疯炒Web2.0的时代,并不能阻止无数基于Win32API的老掉牙系统继续统治各单位的主要业务,妨碍以此为生的公司与程序员们大捞钞票。这充分说明了C/S的价值与必要性。毕竟很多C/S下简单的界面功能,换到B/S下可得费不少心血,响应也远不及C/S。各企事业单位的大多数业务系统,也并不需要internet。由此可见祖先的“中庸之道”是何等明智。以笔者愚见,B/S 适用于必须以internet为传输媒介的系统,换言之也就是各组织的外部系统;而内部业务系统,多数情况下仍应以C/S为佳。
以上论点并非要我们回到上一个基于Win32API的时代,而是需要开辟一个全新的C/S时代。上一代C/S系统,至今仍难以解决诸如客户端部署、信息孤岛,过分依赖数据库,访问容量低,扩展性与可维护性差等等“硬伤”。原因至少有三,一是以数据库系统为核心,无法适应数据交换标准化与多媒介的要求;二是因 Win32API的垄断造成各平台与软件不兼容;三是未能应用OOP的方式进行开发,未进行分层设计,代码高度耦合。
那么我们的新C/S时代应该以怎样的方式解决问题?首先,数据不应再采用以数据库、文档厂商自行其事的标准(如Oracle、SQL Server、WinWord),而应采用统一的标准(现在主要是XML);其次,应脱离专属平台与垄断技术;第三,深入研究OOP,清晰地分层设计,降低代码的耦合度,使系统具有良好的可维护性与扩展性。只有这样,我们才能在客户业务与IT技术飞速发展的时代,充分保护与发展好我们的即有设计与代码,快速满足客户的需求。像上个时代不断重建那种“做好就扔”的快速原型系统之悲剧不应一再重演。
标准是有了,那么有这样的技术吗?有,而且近在眼前,那就是Swing。其实这技术Sun老早就提供给大家了,可惜在国内一直火不起来。其中原因及笔者力推的原因有三:一、Swing这种基于虚拟机的技术,比之Win32 Form慢多了。这在三五年前的确是个大问题。但现在的机器快得太多,连MS也力推基于虚拟机的winForm,这说明虚拟机的时代全面到来是确定无疑了。但MS因其垄断政策,导致.NET成了瘸腿的虚拟机,跨平台的要求短期内是不可能的。与平台脱耦合的要求只有Swing才能担当。二、Swing的设计要求高。Swing将经典的MVC可谓发挥得淋漓尽致。而由于历史原因,国内绝大多数C/S程序员一直于缺乏OOP习惯及经验。对Swing这种经典设计方式是难以接受的,无法领会由分层所带来的巨大长远优势。故宁可死守VB、PB、Delphi这些失去前途的东西,或者抵不住MS winForm快餐的诱惑,再次投入MS过程式编程的泥潭。不深入理解OOP,不深入领会分层思想,几乎无法有效使用Swing,这正是Sun的严格与苦心,大家要用心体会啊。三、MS与国内很多程序员自Swing诞生以来,就无时不对其冷嘲热讽。以致于有志于C/S的Java程序员(笔者曾经的状态)甚至绝望地热炒起Swt这种不成熟的东西。于是在无处不在的中伤与分裂中,Swing在国内一直开不了花。前一阵子听说Swing在国外其实是很火的,上网用google一搜"Swing"-95,700,000,再一比"winForm"-4,980,000。大家没想到吧!如果是在国内的C/S市场,只 Swing只怕连winForm的十分之一都不及。这不得不提上面所说的“历史原因”。国外的C/S程序员,大都有丰富的C++经历,早已体会了OOP与分层的好处,故Swing必然成为虚拟机时代最好的选择;而国内的C/S程序员,基本上是在RAD的浪潮中投入行业的,非常缺乏OOP的经验。导致今天不但在C/S领域,就算在B/S领域,也不断地以ASP模式制造无前途的系统。所以包括Swing、EJB、JSF等等这些东西被很多人瞎搞与乱骂也就不足为怪了。顺便提一个最近热炒的Flex、MS Expression。Flex不过是Adobe的专属技术,最多落个Flash的结局就不错了。MS的东西风格与前途一向如此,不再多论。而身处于编程世界最广泛、最成熟的Java体系,Swing无疑是最有前途与通用性的。应当说,现在国内大部分程序员,是曾经并且将要继续靠C/S吃饭的。那么,但愿此文能让大家重新认真地、负责任地审视并应用Swing,体会那纯正的OOP与分层设计,再塑国内又一个高度繁荣并且高质量的C/S时代。
二、 Swing的设计要求高。Swing将经典的MVC可谓发挥得淋漓尽致。而由于历史原因,国内绝大多数C/S程序员一直于缺乏OOP习惯及经验。对 Swing这种经典设计方式是难以接受的,无法领会由分层所带来的巨大长远优势。故宁可死守VB、PB、Delphi这些失去前途的东西,或者抵不住MS winForm快餐的诱惑,再次投入MS过程式编程的泥潭。不深入理解OOP,不深入领会分层思想,几乎无法有效使用Swing,这正是Sun的严格与苦心,大家要用心体会啊——————————————————一针见血。
1.模型驅動(Model-Driven)的編程方式.2.提供一套單一的API,但是能夠支援多種視感(look-and-feel),爲用戶提供不同的介面。] 但嚴格的說,Swing中的MVC實際上是MVC的一個變體:M-VC。 Swing中只顯示的定義了Model介面,而在一個UI物件中集成了視圖和控制器的部分機制。View和Control比較鬆散的交叉組合在一起,而更多的控制邏輯是在事件監聽者部分引入的,很難作出一個能夠適應不同View的一般化的Controller來,而且,一般也沒有很大的必要。 在Swing中基本上每一個元件都會有對應的Model物件。但其並不是一一對應的,一個Model介面可以爲多個Swing對向服務,例如:JProgressBar,JScrollBar,JSlider這三個元件使用的都是BoundedRangeModel介面。這種模型的共用更能夠從分的體現MVC的內涵。 MVC實際上是它由多個更基本的設計模式組合而成. Model-View是Subject和Obverser的關係,模型的改變必須要在UI物件中體現出來。Swing使用了JavaBeans的事件模型來實現這種通知機制。具體而言,有兩種實現辦法,一是僅僅通知事件監聽者狀態改變了,然後由事件監聽者向模型提取必要的狀態資訊。這種機制對於事件頻繁的元件很有效。另外的一種辦法是模型向監聽者發送包含了已改變的狀態資訊的通知給UI。這兩種方法根據其優劣被分別是現在不同的元件中。比如在JScollBar中使用的是第一種方法,在JTable中使用的是第二種方法。而對Model而言,爲了能夠支援多個View,它並不知道具體的每一個View。它維護一個對其資料感興趣的Obverser的列表,使得當資料改變的時候,能夠通知到每一個Swing元件物件。 View-Controller則是由Strategy模式所描敘的,View用一個特定的Controller的實例來實現一個特定的回應策略,更換不同的Controller,可以改變View對用戶輸入的回應。而其他的一些設計模式也很容易組合到這個體系中。比如,通過Composite模式,可以將多個View嵌套組合起來;通過FactoryMethod模式來指定View的Controller,等等。 Model 每種支援資料與狀態的 Swing 元件都有一種與之相關的模型介面。無論介面感興趣的是封裝於該模型的資料還是狀態,它都會包含允許元件以編程方式查詢模型內容的若干方法。 每個模型介面都提供兩類方法:一類方法提供對資料與狀態的訪問,而另一類方法允許元件或者其他物件註冊或取消註冊事件監聽程式。監聽程式的類型及其提供的事件物件都由這些方法定義。請看下面的ListModel 介面. ListModel 介面代表 JList 元件中的資料。這是三種集合模型中最簡單的一種。(另外兩種分別是 JTree 和 JTable。) ListModel 有兩個方法用於檢索列表中的元素個數以及各個元素,另外還有兩個方法用於維護感興趣的監聽程式列表,以便監聽列表模型的變化。 ListModel 的演示
123456789
package javax.swing;
import javax.swing.event.ListDataListener;
public interface ListModel
{
int getSize();
Object getElementAt(int index);
void addListDataListener(ListDataListener listener);
void removeListDataListener(ListDataListener listener);
} 在 ListModel 介面中,getSize() 與 getElementAt() 方法用於遍曆模型中的元素,而其他兩個方法用於建立與感興趣的監聽程式之間的關聯,以便監聽模型的變化。 ListDataListener 介面支援三個方法,當模型監聽到其底層資料發生變化時就會調用這三個方法。這三個方法是 intervalAdded()、intervalRemoved() 和 contentsChanged(),每個方法都接受單個 ListDataEvent 作爲參數。根據模型所發生變化的複雜程度之不同,模型實現可以使用其中的任一個方法來描述這些變化。通常, intervalAdded() 和 intervalRemoved() 用於描述變化的時間間隔;當變化過於複雜,無法作爲一個閉合間隔進行描述時,就會用到 contentsChanged()。 請記住這一點:JList 元件只對 ListModel API 的實現感興趣。該元件並不關心資料駐留何處以及資料是如何組織的。無論該模型是一個缺省類、抽象類的擴展,還是 ListModel 介面的一種直接實現,都不影響 JList 元件的行爲。