您的位置:首页 > 编程语言 > Java开发

Java Swing的JScrollPane结构是否合理?

2006-06-30 17:28 288 查看
Java Swing的JScrollPane结构是否合理?

Java中的JScrollPane几乎负责了一切与滚动面相关的东西,比如说,你要滚动一个大的组件,把它放入一个JScrollPane中即可,而一些独特的滚动组件,比如说JList,JTextArea也是要放到JScrollPane中才能滚动。从表面上想,这似乎是合理的,良好设计的,一切需要滚动的东西都放入一个滚动面板里面,而这个滚动面板提供两个滚动条和一个视口(JViewport)。

但是,在设计AsWing的时候,发现这样做极难实现JList和JTextArea,因为这两个组件的滚动内容并不是组件本身,而Java Swing也是额外提供了一个Scrollable接口给这两个组件,让其拥有专门的滚动相关的属性。而JScrollPane在滚动组件的时候,就需要先查看被滚动组件是否实现了Scrollable,如果实现了,那么强制转换成Scrollable类型,如果不是,则当一般组件滚动。这样的强制转换看起来很不舒服。而对于基于Flash MovieClip的AsWing来说,实现上更是困难,因为MovieClip是绘制了就一直存在的,所以不能像Java那样需要那一块就绘制那一块,比如说JList,如果有10000个Item,那么不可能创建10000个Item MC再来滚动,因此我采用了JList直接继承自JViewport,自己管理自己的显示内容,这样就可以不用滚动而根据自身特点实现视觉上的滚动,但是这一方法还是感觉不爽,特别是为JViewport抽象出一个接口Viewportable,而这个接口需要大量的方法,而要实现所有这些通用接口,有些实现(比如JTextArea基于Flash的TextField)可能会效率低下。

在这里,我想到了所见到过的其他几个UI库,比如MM V2 Set,ActionStep,甚至其他平台的比如SWT,C#的等等,就是采用一个ScrollView,他负责滚动一般组件,而List或者Text则是直接继承自ScrollView来实现自己的滚动。是否这样才是最好的设计?

JList从Java Swing的一般Component,到AsWing的提升到JViewport,到其他库List直接是ScrollView可以看出,似乎JList的滚动管理一步步升到了顶层。

………………从第一段文字的描述看,JScrollPane这样的逻辑的确很诱人,诱人的逻辑是否肯定有优雅的设计方法?是Java Swing团队没找到?我没找到?还是根本就不合逻辑?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  swing java flash swt list c#