查看文章 |
java学习杂谈(五)
2008-07-11 00:25
”Kitty” > A Cat 所谓DOM解析的思路是把整个树状图存入内存中,需要那个节点只需要在树上搜索就可以 读到节点的属性,内容等,这样的好处是所有节点皆在内存可以反复搜索重复使用,缺点 是需要消耗相应的内存空间。 自然SAX解析的思路就是为了克服DOM的缺点,以事件触发为基本思路,顺序的搜索下来 ,碰到了Element之前触发什么事件,碰到之后做什么动作。由于需要自己来写触发事件的 处理方案,所以需要借助另外一个自定义的Handler,处于org.xml.sax.helpers包中。它的优点 当然是不用整个包都读入内存,缺点也是只能顺序搜索,走完一遍就得重来。 大家很容易就能猜到,接触到的J2ee框架用的是哪一种,显然是DOM。因为类似Struts, Hibernate框架配置文件毕竟是很小的一部分配置信息,而且需要频繁搜索来读取,当然会 采用DOM方式(其实SAX内部也是用DOM采用的结构来存储节点信息的)。现在无论用什 么框架,还真难发现使用SAX来解析XML的技术了,如果哪位仁兄知道,请让笔者也学习学 习。 既然解析方式有了,那么就需要有解析的存储位置。不知道大家是否发现org.w3c.dom这个 包是没有实现类全部都是接口的。这里笔者想说一下Java如何对XML解析是Jdk应该考虑的 事,是它的责任。而w3c组织是维护定义XML标准的组织,所以一个XML结构是怎么样的由 w3c说了算,它不关心Java如何去实现,于是乎规定了所有XML存储的结构应该遵循的规则 ,这就是org.w3c.dom里全部的接口目的所在。在笔者看来,简单理解接口的概念就是实现 者必须遵守的原则。 整个XML对应的结构叫Document、子元素对应的叫做Element、还有节点相关的Node、 NodeList、Text、Entity、CharacterData、CDATASection等接口,它们都可以在XML的语法中 间找到相对应的含义。由于这里不是讲解XML基本语法,就不多介绍了。如果大家感兴趣 ,笔者也可以专门写一篇关于XML的语法规则帖与大家分享一下。 2. Java Swing Swing是一个让人又爱又恨的东西,可爱之处在于上手很容易,较AWT比起来Swing提供的 界面功能更加强大,可恨之处在于编复杂的界面工作量实在是巨大。笔者写过超过3000行 的Swing界面,感觉用户体验还不是那么优秀。最近又写过超过6000行的,由于功能模块多 了,整体效果还只是一般般。体会最深的就一个字:累! 所以大家现在都陆续不怎么用 Swing在真正开发的项目上了,太多界面技术可以取代它了。笔者去写也是迫于无奈组里面 大家都没写过,我不入地域谁入? 尽管Swing慢慢的在被人忽略,特别是随着B/S慢慢的在淹没C/S,笔者倒是很愿意站出来为 Swing正身。每一项技术的掌握绝不是为了流行时尚跟风。真正喜欢Java的朋友们还是应该 好好体会一下Swing,相信在校的很多学生也很多在学习它。很可能从Jdk 1.1、1.2走过来的 很多大学老师可能是最不熟悉它的。 Swing提供了一组轻组件统称为JComponent,它们与AWT组件的最大区别是JComponent全部 都是Container,而Container的特点是里面可以装载别的组件。在Swing组件中无论是JButton 、JLabel、JPanel、JList等都可以再装入任何其他组件。好处是程序员可以对Swing组件实现 “再开发”,针对特定需求构建自己的按钮、标签、画板、列表之类的特定组件。 有轻自然就有重,那么轻组件和重组件区别是?重组件表现出来的形态因操作系统不同而 异,轻组件是Swing自己提供GUI,在跨平台的时候最大程度的保持一致。 那么在编程的时候要注意一些什么呢?笔者谈谈自己的几点经验: a. 明确一个概念,只有Frame组件才可以单独显示的,也许有人会说JOptionPane里面的静态 方法就实现了单独窗口出现,但追寻源代码会发现其实现实出来的Dialog也需要依托一个 Frame窗体,如果没有指定就会默认产生一个然后装载这个Dialog显示出来。 b. JFrame是由这么几部分组成: 最底下一层JRootPane,上面是glassPane (一个JPanel)和layeredPane (一个JLayeredPane),而 layeredPane又由contentPane(一个JPanel)和menuBar构成。我们的组件都是加在contentPane 上,而背景图片只能加在layeredPane上面。 至于glassPane是一个透明的覆盖了contentPane 的一层,在特定效果中将被利用到来记录鼠标坐标或掩饰组件。 c. 为了增强用户体验,我们会在一些按钮上添加快捷键,但Swing里面通常只能识别键盘的 Alt键,要加入其他的快捷键,必须自己实现一个ActionListener。 d. 通过setLayout(null)可以使得所有组件以setBounds()的四个参数来精确定位各自的大小、位 置,但不推荐使用,因为好的编程风格不应该在Swing代码中硬编码具体数字,所有的数字 应该以常数的形式统一存在一个静态无实例资源类文件中。这个静态无实例类统一负责 Swing界面的风格,包括字体和颜色都应该包括进去。 e. 好的界面设计有一条Golden Rule: 用户不用任何手册通过少数尝试就能学会使用软件。所 以尽量把按钮以菜单的形式(不管是右键菜单还是窗体自带顶部菜单)呈现给顾客,除非 是频繁点击的按钮才有必要直接呈现在界面中。 其实Swing的功能是相当强大的,只是现在应用不广泛,专门去研究大概是要花不少时间的 。笔者在各网站论坛浏览关于Swing的技巧文章还是比较可信的,自己所学非常有限,各人 体会对Swing各个组件的掌握就是一个实践积累的过程。笔者只用到过以上这些,所以只能 谈谈部分想法,还望大家见谅! |