Swing模型和渲染器的示例分析(swing,编程语言)

时间:2024-04-29 14:55:29 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :

    Swing%E6%A8%A1%E5%9E%8B%E5%92%8C%E6%B8%B2%E6%9F%93%E5%99%A8%E7%9A%84%E7%A4%BA%E4%BE%8B%E5%88%86%E6%9E%90

Swing模型和渲染器

在这些更为复杂的Swing组件中,渲染器是提供可扩展性的关键。我们以JTable作为渲染器的示例。缺省表格中的每一格可能都有一个JLabel,这对于比较小的数据集来说可行,但是对于大数据集就行不通。比如,如果使用这种表格显示1000x1000的数据集,需要的内存可能要1G,即使每个格子都是空的。

如果解决这种扩展性问题?Swing的JTable使用一个组件来画出所有相同类型的格子。比如所有的String对象的格子都使用相同的组件画。这种类型的组件被称作渲染器(renderer),使用渲染器显示多个表格极大的减小了大型数据表存储空间。

当渲染器用来显示表格时,JTable从model中获取格子中的数据,然后使用这些数据对渲染器进行配置,然后使用该渲染器画出该格子。接下来,渲染器继续移动到下一个格子,然后重复这个过程。

注意你可以通过操作Swing模型和渲染器来控制这个过程,所有的矢量组件,包括JTree、JList以及JComboBox都使用渲染器方法,并不仅限于JTable。

模型(Model)

直接操作Swing的模型(Model)对于编写可扩展的用户界面至关重要,下面代码是往JComboBox添加数据项的通常做法:

这些代码只是简单的往JComboBox中添加数据项,代码同往AWT的Choice中添加选项类似,这种方法对于小数据量来说可以,但是当要添加大量数据时就会明显变得非常慢。

尽管上面的代码没有明确引用任何模型,JComboBox的模型对象实际上参与这个过程,每次调用addItem时,JComboBox内部发生了许多操作:组件将请求传递给JComboBox的模型,模型发送一个事件表明一个新项被添加。很明显,如果你直接操作模型的将会更高效,如下例所示:

这样为什么会更快呢?原因有两个。***,因为所有项是一次添加到模型去,而不是一个一个的,只有一个事件发出,这意味着更少的事件触发,更少的方法调用。第二是因为需要通知变化的对象更少,总的工作量等于触发次数乘以侦听器数目。因为模型是新创建的,侦听在上面的侦听器为零,这意味着没有触发事件发生。

从上面的例子可以学到两点:

尽可能使用批操作,尽量减少触发事件的数量。

当初始化或者需要完全替换模型的内容时,考虑重新生成模型,不要使用已经存在的模型,已存在模型上已经保持了很多的侦听器,新生成的模型没有侦听器,这样避免了不必要的处理函数的调用。

触发事件数量严重影响你的程序启动时间,也会影响打开对话框和相似操作的时间。

本文:Swing模型和渲染器的示例分析的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:如何部署Mono开发环境下一篇:

11 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18