【问题标题】:How to render custom JTable cell in background?如何在后台渲染自定义 JTable 单元格?
【发布时间】:2014-10-19 14:03:00
【问题描述】:

假设我的自定义渲染需要很长时间。我可以通过什么方式在后台渲染单元格?可能我需要在某个单元格变得可见时接收事件,然后在单独的线程中渲染它,然后实际绘制。

如何做到这一点?

更新

我知道渲染应该很快。但在我的情况下不是这样。因此,我需要在表示和模型之间增加一层,其中将包含某种缓存。例如,预渲染单元格的图像。问题是如何将这一层与对象挂钩。

【问题讨论】:

  • 你可以使用 SwingWorker 来创建图像,并让它返回一个 Image 或一个 Renderer 使用的 Icon,但在大多数情况下,魔鬼存在于细节中。如果您需要更具体的帮助,请先告诉我们更多细节并向我们展示您的相关代码,最好是minimal example program or MCVE。
  • 目前我已经有一个模型。并且绘制这个模型条目需要很长时间。这是事实。我不会重构什么模型只是为了加快渲染速度,因为模型不应该包含视觉部分。
  • This example 使用SwingWorker 复制文件,并在JTable 中显示进度,它可能会提供一些想法

标签: java swing jtable backgroundworker custom-renderer


【解决方案1】:

渲染应该尽可能快。渲染不应该做复杂的计算,只是绘制模型,而不是每次都计算。 渲染是从 EDT(事件调度线程)调用的,我认为,如果没有更多信息,也许您应该在单独的线程中计算模型,而渲染只是在 EDT 中绘制模型。 如果模型仍然不可用,您可以禁用该组件。

请发布代码以获得更精确的解决方案。

【讨论】:

  • 我们在俄罗斯有一句关于这个案例的谚语:“小麦要及时成熟,数量充足”。赫鲁晓夫这样说。我知道渲染应该很快。每个人都知道。问题是如果没有,该怎么办。
  • +1, The question is what to do when it doesn't. 并且我们已经为您提供了最好的答案,因为您拒绝发布演示代码,即使您被要求这样做两次。基本答案是预渲染。如果没有渲染过程的详细信息以及为什么需要这么长时间,我们无法提出更多具体的解决方案。
猜你喜欢
  • 2011-11-08
  • 2012-08-05
  • 2012-04-21
  • 1970-01-01
  • 2013-07-19
  • 2011-10-02
  • 2011-10-02
  • 2013-12-16
  • 2012-10-03
相关资源
最近更新 更多