Swing学习笔记(二)——学习路线
3月11日
花了两天时间终于把自己的Swing小Demo完成了(貌似也没什么庆贺的啊),Swing的基本学习也告一段落了。明天开始UIFactory的学习。今天把一些Swing的知识点整理下,顺便总结下学习Swing的感受。
Swing的学习过程:
1.了解Swing的发展历程
个人认为学习了解一项技术的发展和历史有助于自己把握一项技术的整体。比如根据这项技术产生的年代结合那个时代的整体技术浪潮能给自己很多启发。如刚开始学习.net和C#的时候总是感觉它跟java太像了,但是一回想它的产生原因和当时的背景也就不了然了。)
2. 了解Swing的整体结构和设计思想。
Swing的设计严格遵循了MVC结构的,可能在swin*生初期MVC结构让一些人还不适应,所以在很多介绍Swing MVC的资料里面都把MVC说的很前卫,但是以现在的技术背景和主流框架来看MVC的设计思想已经不难接受了。
3.学习swing组件和组件的分类。
Swing的组件很多,在这么短的时间内把所有组件都学习一个遍是不显示的,而且短时间内学习大量组件的用法其实是很容易忘记的。在了解了Swing的结构之后,我首先是打开了Java api简单看了下Swing的jar包结构以及类之间的结构。下面这张图能让我们很快就记住Swing的组件间结构的。而且通过类之间的继承关系能给我们很多启示的,比如JMenu、JMenuItem、JButton都继承自了AbstractButton类,那么这几个类很可能都有类似的事件监听事件的。
通过上面的类间关系,我们可以知道:
-
-
凡是Swing组件都是以J开头的以区别AWT组件。
-
Swing大部分组件都是继承自JComponent组件的,而JComponent组件继承自了Container类,根据“自注释”的原则,很多组件其实都是一个容器,他们可能都含有add方法。
-
JFrame和JDialog是平级的,他们都继承了Window类,说明他们都是可以独立启动和绘制的窗口,应该是框架级的容器。
-
以上的猜测仅仅是我们通过整个类间关系猜测出来的,至于它们之间的其他特性和区别我们需要查阅具体的资料和代码来实践,毕竟实践是检验真理的唯一标准嘛。实践过程中我们应该带着如下的疑问来实践:
-
-
-
容器间的层级关系:使用Swing组件的时候组件间的层级关系和类关系是否一致,也就是我们要显示一个JButton啥的需要不需要先实例化一个JFrame或者JPanel啊啥的。
-
同级别容器如JFrame和JDialog之间的差别。
-
哪些容器是可以绘制的或者说哪些容器室看的见的,能显示实际数据的。
-
-
-
4.实践使用Swing组件,学习布局管理器(LayoutManager)。
Swing组件很多,组件也有很多方法可以方便我们自定义组件,短时间不可能全部实践一个遍,而且有些方法是在一些比较复杂的场景下才好用的,在简单场景下使用那下方法反而让我们学习的很吃力。所以我在实践Swing组件的时候仅仅是实践了常用组件的必要方法,实践过程以理解、归类、猜测为主。
5.学习为组件注册监听器
在学会了显示组件和布局组件之后,我们就需要响应组件事件了。看过设计模式的应该都知道Observer模式(观察者模式),关于这个模式的最经典的举例应该就是那个烧水的例子了。而且学习过C#委托代理模型的对于这个模式也会很熟悉。Swing的事件监听机制也是一个Observer模式的实现,所以理解了Observer模式学习Swing事件监听也就很容易了。剩下的问题也就是查阅API来了解组件的不同注册方法可以获得事件了已经事件类型的分类。
6.学习拥有Model的组件的用法
拥有Model的组件是指JTree和JTable这两个组件,这两个组件在使用的时候需要指定他们的Model对象,甚至我们可以定义他们的Render。通过对组件绑定Model我们就可实现组件间的组合应用了。Swing的JTree和JTable组件确实很灵活,通过集成Model和Render的类和接口我们可以定制很多不错的效果。
学习model和render的最好方法就是阅读代码了,找找别人写的例子,对比运行效果来看看model和render的具体方法和一般属性的方法。学习Model、Render的时候重点应该理解Model、Render、Component间的关系,直接从细节的方法和属性学习不是一个好的过程。
7.制作Demo梳理知识点
学习完Swing基本的东西之后就应该制作一个小Demo了,首先从纸上设计好自己的界面。“界面先行”的道理一定要记牢,界面原型代表了很多东西,需求从界面原型上可以看出业务逻辑来,UI则可以看出界面原型布局框架,程序可以看出数据的流向和整体框架,总之对于有交互的程序一定要界面先行了。
设计好界面之后,想想界面的整体布局划分以及每个小模块的布局方式,之后设计自己的Demo的小架构,包结构,数据结构。
上面的都设计好了之后开始“毁”键盘吧。。。。
至于一个小Demo就不要费时测试了。
总结与感受:
学习Swing的过程让我想起了自己在学习U3D GUI API和WPF程序的时候,感觉Swing和U3D GUI还有WPF很多地方都很相似,尤其是某些资料在分析Swing的实现的是降到Update等方法让自己更感亲切。
1.Swing和WPF对比
把Swing和WPF对比对Swing好像有点残忍,毕竟WPF是07年随着Vista系统一起发布的,而Swing则古老的多了。Swing和WPF一样都可以做窗口界面,但是很明显WPF要比Swing好用很多,WPF的界面布局更适合学习过HTML、CSS的人使用,Swing的则是纯代码布局。WPF程序的界面布局重在配置文件,后台代码大多是业务逻辑上的。Swing全是靠手工代码来实现布局,使用Swing布局的时候代码有的时候会很长。(其实依靠可视化工具可能会好很多)
2.Swing和U3D GUI对比
把Swing和U3D的GUI对比其实也是没有什么可比性的,个人感觉Swing代码要比U3D代码繁琐。
PS:以上仅是个人学习Swing的一点愚见,欢迎交流!不过话说回来了,CSDN的Blog编辑器感觉很不好用。。。。。= =