当前位置: 首页 > 面试题库 >

了解Swing的JTable和JTree的渲染器机制的困难

经清野
2023-03-14
问题内容

通常,在使用JTableJTree用户编写和分配时,它是自己特定的单元格渲染器。

从中继承用户的组件DefaultTableCellRenderer并实现renderer方法是很常见的getTableCellRendererComponent。事实证明,DefaultTableCellRenderer实际上是继承自JLabel,因此在调用super时(在render方法处)返回自己(此),因此用户的渲染器也可以类似地返回自己(此)。

而且一切正常。

我的问题是怎么回事?

每次表调用此方法时,都会为其分配不同的参数,并且输出标签将根据这些参数进行更改。如果确实是该标签的相同实例–是否应该根据对该方法的最后一次调用来更改它?这是否意味着表的所有单元格都受到相同标签实例的感染,该标签实例具有相同的值(上次调用renderer方法的值)?

我已经在网上搜索过,并在Swing的代码中进行了挖掘,但找不到任何实际上复制输出标签的 克隆复制构造函数
。我找不到任何证据证明(也许)swing使用反射来每次从头开始实例化渲染器。

我已经阅读了有关JTables的Swing
教程,并且可以在其中找到下一行:

您可能希望表中的每个单元格都是一个组件。
但是,出于性能原因,Swing表的实现方式有所不同。取而代之的是,通常使用单个单元格渲染器来绘制包含相同类型数据的所有单元格。您可以将渲染器视为可配置的墨水戳,表格使用该墨水戳将格式正确的数据标记到每个单元格上。当用户开始编辑单元格的数据时,单元格编辑器将接管该单元格,从而控制该单元格的编辑行为。

他们暗示,我的意思确实是正确的,但没有解释其实际实现方式。

我听不懂 你们可以吗?


问题答案:

这是flyweight模式的实现。

当JTable重新绘制自身时,它将启动循环并遍历必须绘制的每个单元格。

对于每个单元格,它将使用与该单元格相对应的参数调用渲染器。渲染器返回一个组件。此组件绘制在与当前表格单元格对应的矩形中。

然后,为下一个单元格调用渲染器,并将返回的组件(例如,具有不同的文本和颜色)绘制在与该单元格相对应的矩形中,依此类推。

想象一下,每次调用渲染器时,都会获取返回组件的屏幕截图并将其粘贴到表格单元格中。



 类似资料:
  • 通常在使用JTable或JTree时,用户定义自己的单元渲染器。 从DefaultTableCellRenderer继承用户组件是很常见的,它实现了renderer方法getTableCellRendererComponent。事实证明,DefaultTableCellRenderer实际上继承自JLabel,因此在调用super(在render方法中)时返回自身(this),因此用户的渲染器也可

  • 我试图使我的头的背景具有渐变。 这可以很好地使用代码: 然而,由于某种原因,我看不到我的边框和文本,似乎文本也应用了渐变? 我希望文本为黑色,各栏之间有彩色边框。有什么想法吗?

  • 我已经建立了一个,并使其包含18列。最初,当它是13列时,它非常适合JTable,并且没有撕裂。然而,一旦我使它包含18个表,并将自动调整大小设置为关闭,当我使用水平滚动条尝试滚动其他列时,JTable的撕裂开始发生,如图所示: Netbeans还开始向我发送大量错误消息,如: 为什么会这样?这个问题有什么解决办法吗?谢谢 真抱歉!下面是用于初始化表的代码。希望会有用!

  • 我有一个swing应用程序,它在JScrollPane中包含一个SVG画布。应用程序修改显示的SVG文档,这也会导致文档大小的更改。此大小更改需要反映在应用程序中。调整SVG画布的大小,滚动JScrollPane的视口,以便它显示画布的正确部分。 然而,这导致了类似“视觉跳跃”的东西,因为用户首先看到画布大小的变化,然后看到滚动操作。 有没有一种方法可以告诉java停止处理给定组件(及其子组件)上

  • 问题内容: 我正在跟踪发现的一些代码,(是的,我知道它是如何工作的)它来自这里:代码链接 我想做的是如果单元格值设置为“黄色”,则设置单元格前景色 这是我的代码: 和单元格渲染器 问题是,如果我将任何单元格值设置为“黄色”,它就不会改变 提前致谢! 问题答案: 您的渲染器曾经使用过吗?您将其设置为包含String的单元格的默认渲染器,但是是否重载了模型的方法,以便它知道某些单元格包含String

  • 前言 接下来的几篇文章,讲一下二面的内容。 二面的内容: 渲染机制 JS 运行机制 页面性能 错误监控 本文接下来讲渲染机制。 渲染机制包括的内容: 什么是DOCTYPE及作用 浏览器渲染过程 面试经常会问:在浏览器中输入url,发生了哪些事情。其中有一部就是浏览器的渲染过程。 Reflow:重排 面试官问完了渲染机制,一般会紧接着问重排Reflow,你可千万别说你没听过。 Repaint:重绘